Issue while using local IPC for messaging between two local component

0

publish("test/test",message={"a":1})

def publish(self, topic, message, message_format="json"):
"""Publishes message to a topic of AWS IOT

    Args:  
        topic (string): AWS IoT Core Topic  
        message (dict / string): Message to be published  
        message_format  
    """  

    request = PublishToTopicRequest()  
    request.topic_name = topic  
    publish_message = PublishMessage()  
    if message_format != "json":  
        publish_message.binary_message = BinaryMessage(message=bytes(message, "utf-8"))  
        # publish_message.binary_message.message = bytes(message, "utf-8")  
    else:  
        publish_message.json_message = JsonMessage(message=message)  
        # publish_message.json_message.message = message  

    request.publish_message = publish_message  
    operation = self.ipc_client.new_publish_to_topic()  
    operation.activate(request)  
    future = operation.get_response()  
    future.result(TIMEOUT)  

accessControl permissions are:
com.test.test:pubsub:1:
policyDescription: "Allows communication with other components"
operations:
- "aws.greengrass#PublishToTopic"
resources:
- "test/test"

and Greengrass.log are:

2021-01-06T10:30:13.515Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.RpcServer: New connection code [AWS_ERROR_SUCCESS] for [Id 816, Class ServerConnection, Refs 1](2021-01-06T10:30:13.515Z) - <null>. {}
2021-01-06T10:30:13.515Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: aws.greengrass#GreengrassCoreIPC authenticated identity: com.test.test. {}
2021-01-06T10:30:13.515Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: Connection accepted for com.test.test. {}
2021-01-06T10:30:13.515Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: Sending connect response for com.test.test. {}
2021-01-06T10:30:13.517Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.RpcServer: New connection code [AWS_ERROR_SUCCESS] for [Id 818, Class ServerConnection, Refs 1](2021-01-06T10:30:13.517Z) - <null>. {}
2021-01-06T10:30:13.517Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: aws.greengrass#GreengrassCoreIPC authenticated identity: com.test.test {}
2021-01-06T10:30:13.517Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: Connection accepted for com.test.test. {}
2021-01-06T10:30:13.517Z [INFO] (Thread-6) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: Sending connect response for com.test.test. {}
2021-01-06T10:30:13.518Z [ERROR] (Thread-6) com.aws.greengrass.ipc.common.ExceptionUtil: Unhandled exception in IPC. {}
java.lang.NullPointerException

Edited by: allenkallz on Jan 6, 2021 3:21 AM

질문됨 3년 전496회 조회
4개 답변
0

Hi and thanks for using Greengrass v2.

Is there any additional logging after the NullPointerException? There ought to be a stacktrace which would tells us exactly what the problem is.

Thanks!

Michael Dombrowski.

AWS
전문가
답변함 3년 전
0

I think I am also getting same error. Here is the complete stack trace:

2021-01-07T14:31:08.759Z \[INFO] (Thread-17) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: Connection accepted for com.example.IPCExample. {}  
2021-01-07T14:31:08.760Z \[INFO] (Thread-17) software.amazon.awssdk.eventstreamrpc.ServiceOperationMappingContinuationHandler: Sending connect response for com.example.IPCExample. {}  
2021-01-07T14:31:08.760Z \[ERROR] (Thread-17) com.aws.greengrass.ipc.common.ExceptionUtil: Unhandled exception in IPC. {}  
java.lang.NullPointerException  
        at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)  
        at com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent.handlePublishToTopicRequest(PubSubIPCEventStreamAgent.java:113)  
        at com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent.access$100(PubSubIPCEventStreamAgent.java:44)  
        at com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$PublishToTopicOperationHandler.lambda$handleRequest$0(PubSubIPCEventStreamAgent.java:192)  
        at com.aws.greengrass.ipc.common.ExceptionUtil.translateExceptions(ExceptionUtil.java:33)  
        at com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$PublishToTopicOperationHandler.handleRequest(PubSubIPCEventStreamAgent.java:176)  
        at com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$PublishToTopicOperationHandler.handleRequest(PubSubIPCEventStreamAgent.java:160)  
        at software.amazon.awssdk.eventstreamrpc.OperationContinuationHandler.onContinuationMessage(OperationContinuationHandler.java:271)  
        at software.amazon.awssdk.crt.eventstream.ServerConnectionContinuationHandler.onContinuationMessageShim(ServerConnectionContinuationHandler.java:53)  
  

Edited by: kunupat on Jan 7, 2021 6:46 AM

kunupat
답변함 3년 전
0

Based on that stacktrace, that must mean that the topic is null. Please ensure that you have set a non-null topic name in the publish request.

request.topic = "my/topic/name"

Thanks.
Michael Dombrowski

Edited by: MichaelDombrowski-AWS on Jan 7, 2021 9:08 AM

AWS
전문가
답변함 3년 전
0

Hi
Thanks for your reply.

The issue is in AWS IoT Python SDK v2 that for communication with the local component we have to create request instance PublishToTopicRequest that accept topic with-param name "topic"

but when we have to communicate with Cloud then we have to create request instance PublishToIoTTopicRequest and this class accepts topic with-param name topic_name. I have one question why you dont have the same param name at both places. Its confusing

See the param names of both classes in the attachment.
And previously it`s not mentioned in Greengrass v2 documentation.

Edited by: allenkallz on Jan 8, 2021 8:37 AM

답변함 3년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠