You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by lh...@apache.org on 2025/07/23 12:00:49 UTC

(pulsar) branch branch-3.0 updated (ffc24958658 -> 51dd60e5862)

This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a change to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git


    from ffc24958658 [fix][broker] Fix duplicate increment of ADD_OP_COUNT_UPDATER in OpAddEntry (#24506)
     new 102fdb3a09d [fix][broker] Fix exclusive producer creation when last shared producer closes (#24516)
     new 51dd60e5862 [improve] Upgrade pulsar-client-python to 3.8.0 in Docker image (#24544)

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 bin/proto/MLDataFormats_pb2.py                     |  381 +---
 docker/pulsar/scripts/install-pulsar-client.sh     |   17 +-
 pom.xml                                            |    6 +-
 .../pulsar/broker/service/AbstractTopic.java       |    8 +-
 .../broker/service/ExclusiveProducerTest.java      |   29 +
 .../instance/src/main/python/Function_pb2.py       | 1861 +-------------------
 .../src/main/python/InstanceCommunication_pb2.py   |  690 +-------
 .../main/python/InstanceCommunication_pb2_grpc.py  |  114 +-
 .../instance/src/main/python/README.md             |   40 +
 src/update_python_protobuf_stubs.sh                |   84 +
 .../update_python_protobuf_stubs_with_docker.sh    |    7 +-
 11 files changed, 431 insertions(+), 2806 deletions(-)
 create mode 100644 pulsar-functions/instance/src/main/python/README.md
 create mode 100755 src/update_python_protobuf_stubs.sh
 copy docker/build.sh => src/update_python_protobuf_stubs_with_docker.sh (66%)


(pulsar) 02/02: [improve] Upgrade pulsar-client-python to 3.8.0 in Docker image (#24544)

Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 51dd60e58623598c11f2666e08c55b8cae8b96b6
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Wed Jul 23 13:54:07 2025 +0300

    [improve] Upgrade pulsar-client-python to 3.8.0 in Docker image (#24544)
    
    (cherry picked from commit 767d583b072e4fb8535ec69928485a22edfcd73c)
---
 bin/proto/MLDataFormats_pb2.py                     |  381 +---
 docker/pulsar/scripts/install-pulsar-client.sh     |   17 +-
 pom.xml                                            |    6 +-
 .../instance/src/main/python/Function_pb2.py       | 1861 +-------------------
 .../src/main/python/InstanceCommunication_pb2.py   |  690 +-------
 .../main/python/InstanceCommunication_pb2_grpc.py  |  114 +-
 .../instance/src/main/python/README.md             |   40 +
 src/update_python_protobuf_stubs.sh                |   84 +
 .../update_python_protobuf_stubs_with_docker.sh    |   13 +-
 9 files changed, 397 insertions(+), 2809 deletions(-)

diff --git a/bin/proto/MLDataFormats_pb2.py b/bin/proto/MLDataFormats_pb2.py
index debfb19af4d..90421b3a1f3 100644
--- a/bin/proto/MLDataFormats_pb2.py
+++ b/bin/proto/MLDataFormats_pb2.py
@@ -1,13 +1,14 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
 # source: MLDataFormats.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+# Protobuf Python Version: 6.31.0
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
 from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
+from google.protobuf.internal import builder as _builder
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -15,328 +16,48 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='MLDataFormats.proto',
-  package='',
-  serialized_pb=_b('\n\x13MLDataFormats.proto\"\xc9\x01\n\x11ManagedLedgerInfo\x12\x31\n\nledgerInfo\x18\x01 \x03(\x0b\x32\x1d.ManagedLedgerInfo.LedgerInfo\x12/\n\x12terminatedPosition\x18\x02 \x01(\x0b\x32\x13.NestedPositionInfo\x1aP\n\nLedgerInfo\x12\x10\n\x08ledgerId\x18\x01 \x02(\x03\x12\x0f\n\x07\x65ntries\x18\x02 \x01(\x03\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\"c\n\x0cPositionInfo\x12\x10\n\x08ledgerId\x18\x01 \x02(\x03\x12\x0f\n\x07\x65ntryId\x [...]
-)
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-
-
-
-_MANAGEDLEDGERINFO_LEDGERINFO = _descriptor.Descriptor(
-  name='LedgerInfo',
-  full_name='ManagedLedgerInfo.LedgerInfo',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='ledgerId', full_name='ManagedLedgerInfo.LedgerInfo.ledgerId', index=0,
-      number=1, type=3, cpp_type=2, label=2,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='entries', full_name='ManagedLedgerInfo.LedgerInfo.entries', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='size', full_name='ManagedLedgerInfo.LedgerInfo.size', index=2,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='ManagedLedgerInfo.LedgerInfo.timestamp', index=3,
-      number=4, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=145,
-  serialized_end=225,
-)
-
-_MANAGEDLEDGERINFO = _descriptor.Descriptor(
-  name='ManagedLedgerInfo',
-  full_name='ManagedLedgerInfo',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='ledgerInfo', full_name='ManagedLedgerInfo.ledgerInfo', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='terminatedPosition', full_name='ManagedLedgerInfo.terminatedPosition', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_MANAGEDLEDGERINFO_LEDGERINFO, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=24,
-  serialized_end=225,
-)
-
-
-_POSITIONINFO = _descriptor.Descriptor(
-  name='PositionInfo',
-  full_name='PositionInfo',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='ledgerId', full_name='PositionInfo.ledgerId', index=0,
-      number=1, type=3, cpp_type=2, label=2,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='entryId', full_name='PositionInfo.entryId', index=1,
-      number=2, type=3, cpp_type=2, label=2,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='individualDeletedMessages', full_name='PositionInfo.individualDeletedMessages', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=227,
-  serialized_end=326,
-)
-
-
-_NESTEDPOSITIONINFO = _descriptor.Descriptor(
-  name='NestedPositionInfo',
-  full_name='NestedPositionInfo',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='ledgerId', full_name='NestedPositionInfo.ledgerId', index=0,
-      number=1, type=3, cpp_type=2, label=2,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='entryId', full_name='NestedPositionInfo.entryId', index=1,
-      number=2, type=3, cpp_type=2, label=2,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=328,
-  serialized_end=383,
-)
-
-
-_MESSAGERANGE = _descriptor.Descriptor(
-  name='MessageRange',
-  full_name='MessageRange',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='lowerEndpoint', full_name='MessageRange.lowerEndpoint', index=0,
-      number=1, type=11, cpp_type=10, label=2,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='upperEndpoint', full_name='MessageRange.upperEndpoint', index=1,
-      number=2, type=11, cpp_type=10, label=2,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=385,
-  serialized_end=487,
-)
-
-
-_MANAGEDCURSORINFO = _descriptor.Descriptor(
-  name='ManagedCursorInfo',
-  full_name='ManagedCursorInfo',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='cursorsLedgerId', full_name='ManagedCursorInfo.cursorsLedgerId', index=0,
-      number=1, type=3, cpp_type=2, label=2,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='markDeleteLedgerId', full_name='ManagedCursorInfo.markDeleteLedgerId', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='markDeleteEntryId', full_name='ManagedCursorInfo.markDeleteEntryId', index=2,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='individualDeletedMessages', full_name='ManagedCursorInfo.individualDeletedMessages', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=490,
-  serialized_end=639,
-)
-
-_MANAGEDLEDGERINFO_LEDGERINFO.containing_type = _MANAGEDLEDGERINFO
-_MANAGEDLEDGERINFO.fields_by_name['ledgerInfo'].message_type = _MANAGEDLEDGERINFO_LEDGERINFO
-_MANAGEDLEDGERINFO.fields_by_name['terminatedPosition'].message_type = _NESTEDPOSITIONINFO
-_POSITIONINFO.fields_by_name['individualDeletedMessages'].message_type = _MESSAGERANGE
-_MESSAGERANGE.fields_by_name['lowerEndpoint'].message_type = _NESTEDPOSITIONINFO
-_MESSAGERANGE.fields_by_name['upperEndpoint'].message_type = _NESTEDPOSITIONINFO
-_MANAGEDCURSORINFO.fields_by_name['individualDeletedMessages'].message_type = _MESSAGERANGE
-DESCRIPTOR.message_types_by_name['ManagedLedgerInfo'] = _MANAGEDLEDGERINFO
-DESCRIPTOR.message_types_by_name['PositionInfo'] = _POSITIONINFO
-DESCRIPTOR.message_types_by_name['NestedPositionInfo'] = _NESTEDPOSITIONINFO
-DESCRIPTOR.message_types_by_name['MessageRange'] = _MESSAGERANGE
-DESCRIPTOR.message_types_by_name['ManagedCursorInfo'] = _MANAGEDCURSORINFO
-
-ManagedLedgerInfo = _reflection.GeneratedProtocolMessageType('ManagedLedgerInfo', (_message.Message,), dict(
-
-  LedgerInfo = _reflection.GeneratedProtocolMessageType('LedgerInfo', (_message.Message,), dict(
-    DESCRIPTOR = _MANAGEDLEDGERINFO_LEDGERINFO,
-    __module__ = 'MLDataFormats_pb2'
-    # @@protoc_insertion_point(class_scope:ManagedLedgerInfo.LedgerInfo)
-    ))
-  ,
-  DESCRIPTOR = _MANAGEDLEDGERINFO,
-  __module__ = 'MLDataFormats_pb2'
-  # @@protoc_insertion_point(class_scope:ManagedLedgerInfo)
-  ))
-_sym_db.RegisterMessage(ManagedLedgerInfo)
-_sym_db.RegisterMessage(ManagedLedgerInfo.LedgerInfo)
-
-PositionInfo = _reflection.GeneratedProtocolMessageType('PositionInfo', (_message.Message,), dict(
-  DESCRIPTOR = _POSITIONINFO,
-  __module__ = 'MLDataFormats_pb2'
-  # @@protoc_insertion_point(class_scope:PositionInfo)
-  ))
-_sym_db.RegisterMessage(PositionInfo)
-
-NestedPositionInfo = _reflection.GeneratedProtocolMessageType('NestedPositionInfo', (_message.Message,), dict(
-  DESCRIPTOR = _NESTEDPOSITIONINFO,
-  __module__ = 'MLDataFormats_pb2'
-  # @@protoc_insertion_point(class_scope:NestedPositionInfo)
-  ))
-_sym_db.RegisterMessage(NestedPositionInfo)
-
-MessageRange = _reflection.GeneratedProtocolMessageType('MessageRange', (_message.Message,), dict(
-  DESCRIPTOR = _MESSAGERANGE,
-  __module__ = 'MLDataFormats_pb2'
-  # @@protoc_insertion_point(class_scope:MessageRange)
-  ))
-_sym_db.RegisterMessage(MessageRange)
-
-ManagedCursorInfo = _reflection.GeneratedProtocolMessageType('ManagedCursorInfo', (_message.Message,), dict(
-  DESCRIPTOR = _MANAGEDCURSORINFO,
-  __module__ = 'MLDataFormats_pb2'
-  # @@protoc_insertion_point(class_scope:ManagedCursorInfo)
-  ))
-_sym_db.RegisterMessage(ManagedCursorInfo)
-
-
-DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n#org.apache.bookkeeper.mledger.protoH\001'))
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13MLDataFormats.proto\"&\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\"D\n\x15OffloadDriverMetadata\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\x1d\n\nproperties\x18\x02 \x03(\x0b\x32\t.KeyValue\"\xc9\x01\n\x0eOffloadContext\x12\x0e\n\x06uidMsb\x18\x01 \x01(\x03\x12\x0e\n\x06uidLsb\x18\x02 \x01(\x03\x12\x10\n\x08\x63omplete\x18\x03 \x01(\x08\x12\x19\n\x11\x62ookkeeperDeleted\x18\x04 \x01(\x08\x12 [...]
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'MLDataFormats_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+  _globals['DESCRIPTOR']._loaded_options = None
+  _globals['DESCRIPTOR']._serialized_options = b'\n#org.apache.bookkeeper.mledger.protoH\001'
+  _globals['_MANAGEDCURSORINFO'].fields_by_name['lastActive']._loaded_options = None
+  _globals['_MANAGEDCURSORINFO'].fields_by_name['lastActive']._serialized_options = b'\030\001'
+  _globals['_COMPRESSIONTYPE']._serialized_start=2008
+  _globals['_COMPRESSIONTYPE']._serialized_end=2076
+  _globals['_KEYVALUE']._serialized_start=23
+  _globals['_KEYVALUE']._serialized_end=61
+  _globals['_OFFLOADDRIVERMETADATA']._serialized_start=63
+  _globals['_OFFLOADDRIVERMETADATA']._serialized_end=131
+  _globals['_OFFLOADCONTEXT']._serialized_start=134
+  _globals['_OFFLOADCONTEXT']._serialized_end=335
+  _globals['_OFFLOADSEGMENT']._serialized_start=338
+  _globals['_OFFLOADSEGMENT']._serialized_end=527
+  _globals['_MANAGEDLEDGERINFO']._serialized_start=530
+  _globals['_MANAGEDLEDGERINFO']._serialized_end=835
+  _globals['_MANAGEDLEDGERINFO_LEDGERINFO']._serialized_start=683
+  _globals['_MANAGEDLEDGERINFO_LEDGERINFO']._serialized_end=835
+  _globals['_POSITIONINFO']._serialized_start=838
+  _globals['_POSITIONINFO']._serialized_end=1097
+  _globals['_NESTEDPOSITIONINFO']._serialized_start=1099
+  _globals['_NESTEDPOSITIONINFO']._serialized_end=1154
+  _globals['_LONGLISTMAP']._serialized_start=1156
+  _globals['_LONGLISTMAP']._serialized_end=1198
+  _globals['_MESSAGERANGE']._serialized_start=1200
+  _globals['_MESSAGERANGE']._serialized_end=1302
+  _globals['_BATCHEDENTRYDELETIONINDEXINFO']._serialized_start=1304
+  _globals['_BATCHEDENTRYDELETIONINDEXINFO']._serialized_end=1393
+  _globals['_LONGPROPERTY']._serialized_start=1395
+  _globals['_LONGPROPERTY']._serialized_end=1438
+  _globals['_STRINGPROPERTY']._serialized_start=1440
+  _globals['_STRINGPROPERTY']._serialized_end=1485
+  _globals['_MANAGEDCURSORINFO']._serialized_start=1488
+  _globals['_MANAGEDCURSORINFO']._serialized_end=1810
+  _globals['_MANAGEDLEDGERINFOMETADATA']._serialized_start=1812
+  _globals['_MANAGEDLEDGERINFOMETADATA']._serialized_end=1908
+  _globals['_MANAGEDCURSORINFOMETADATA']._serialized_start=1910
+  _globals['_MANAGEDCURSORINFOMETADATA']._serialized_end=2006
 # @@protoc_insertion_point(module_scope)
diff --git a/docker/pulsar/scripts/install-pulsar-client.sh b/docker/pulsar/scripts/install-pulsar-client.sh
index 0951b2aec1b..5d19f6254c8 100755
--- a/docker/pulsar/scripts/install-pulsar-client.sh
+++ b/docker/pulsar/scripts/install-pulsar-client.sh
@@ -20,11 +20,12 @@
 
 set -x
 
-# TODO: remove these lines once grpcio doesn't need to compile from source on ARM64 platform
-ARCH=$(uname -m | sed -r 's/aarch64/arm64/g' |  awk '!/arm64/{$0="amd64"}1')
-if [ "${ARCH}" == "arm64" ]; then
-  apt update
-  apt -y install build-essential python3-dev
-fi
-
-pip3 install pulsar-client[all]==${PULSAR_CLIENT_PYTHON_VERSION}
+# Python dependencies
+# The pinned grpcio and protobuf versions should be compatible with the generated Protobuf and gRPC stubs used
+# in Pulsar Functions Python runtime. You should also update the grpcio version in src/update_python_protobuf_stubs.sh
+# and regenerate the Python stubs if you change the grpcio version here. Please see
+# pulsar-functions/instance/src/main/python/README.md for more details.
+pip3 install --no-cache-dir --only-binary \
+  grpcio==1.73.1 \
+  protobuf==6.31.1 \
+  pulsar-client[all]==${PULSAR_CLIENT_PYTHON_VERSION}
diff --git a/pom.xml b/pom.xml
index 48535a0bfc2..2f29a57db9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,7 +82,7 @@ flexible messaging model and an intuitive client API.</description>
     <pulsar.broker.compiler.release>${maven.compiler.target}</pulsar.broker.compiler.release>
     <pulsar.client.compiler.release>8</pulsar.client.compiler.release>
 
-    <pulsar.client.python.version>3.7.0</pulsar.client.python.version>
+    <pulsar.client.python.version>3.8.0</pulsar.client.python.version>
 
     <UBUNTU_MIRROR>http://archive.ubuntu.com/ubuntu/</UBUNTU_MIRROR>
     <UBUNTU_SECURITY_MIRROR>http://security.ubuntu.com/ubuntu/</UBUNTU_SECURITY_MIRROR>
@@ -1813,6 +1813,8 @@ flexible messaging model and an intuitive client API.</description>
                 <exclude>**/.mvn/**</exclude>
                 <exclude>**/generated/**</exclude>
                 <exclude>**/zk-3.5-test-data/*</exclude>
+                <exclude>**/*_pb2.py</exclude>
+                <exclude>**/*_pb2_grpc.py</exclude>
               </excludes>
             </licenseSet>
           </licenseSets>
@@ -1964,6 +1966,8 @@ flexible messaging model and an intuitive client API.</description>
             <exclude>**/*.so.*</exclude>
             <exclude>**/*.dylib</exclude>
             <exclude>src/test/resources/*.txt</exclude>
+            <exclude>**/*_pb2.py</exclude>
+            <exclude>**/*_pb2_grpc.py</exclude>
           </excludes>
         </configuration>
       </plugin>
diff --git a/pulsar-functions/instance/src/main/python/Function_pb2.py b/pulsar-functions/instance/src/main/python/Function_pb2.py
index 118a6a1cd89..c2e0122b692 100644
--- a/pulsar-functions/instance/src/main/python/Function_pb2.py
+++ b/pulsar-functions/instance/src/main/python/Function_pb2.py
@@ -1,31 +1,14 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
 # -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
 # source: Function.proto
+# Protobuf Python Version: 6.31.0
 """Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
 from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -33,1748 +16,94 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='Function.proto',
-  package='proto',
-  syntax='proto3',
-  serialized_options=b'\n!org.apache.pulsar.functions.protoB\010Function',
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x0e\x46unction.proto\x12\x05proto\"3\n\tResources\x12\x0b\n\x03\x63pu\x18\x01 \x01(\x01\x12\x0b\n\x03ram\x18\x02 \x01(\x03\x12\x0c\n\x04\x64isk\x18\x03 \x01(\x03\"B\n\x0cRetryDetails\x12\x19\n\x11maxMessageRetries\x18\x01 \x01(\x05\x12\x17\n\x0f\x64\x65\x61\x64LetterTopic\x18\x02 \x01(\t\"\xa6\x06\n\x0f\x46unctionDetails\x12\x0e\n\x06tenant\x18\x01 \x01(\t\x12\x11\n\tnamespace\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x11\n\tclassName\x18\x04 \x01(\t\x12\ [...]
-)
-
-_PROCESSINGGUARANTEES = _descriptor.EnumDescriptor(
-  name='ProcessingGuarantees',
-  full_name='proto.ProcessingGuarantees',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ATLEAST_ONCE', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='ATMOST_ONCE', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EFFECTIVELY_ONCE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='MANUAL', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=3834,
-  serialized_end=3925,
-)
-_sym_db.RegisterEnumDescriptor(_PROCESSINGGUARANTEES)
-
-ProcessingGuarantees = enum_type_wrapper.EnumTypeWrapper(_PROCESSINGGUARANTEES)
-_SUBSCRIPTIONTYPE = _descriptor.EnumDescriptor(
-  name='SubscriptionType',
-  full_name='proto.SubscriptionType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SHARED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='FAILOVER', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KEY_SHARED', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=3927,
-  serialized_end=3987,
-)
-_sym_db.RegisterEnumDescriptor(_SUBSCRIPTIONTYPE)
-
-SubscriptionType = enum_type_wrapper.EnumTypeWrapper(_SUBSCRIPTIONTYPE)
-_SUBSCRIPTIONPOSITION = _descriptor.EnumDescriptor(
-  name='SubscriptionPosition',
-  full_name='proto.SubscriptionPosition',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='LATEST', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EARLIEST', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=3989,
-  serialized_end=4037,
-)
-_sym_db.RegisterEnumDescriptor(_SUBSCRIPTIONPOSITION)
-
-SubscriptionPosition = enum_type_wrapper.EnumTypeWrapper(_SUBSCRIPTIONPOSITION)
-_COMPRESSIONTYPE = _descriptor.EnumDescriptor(
-  name='CompressionType',
-  full_name='proto.CompressionType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='LZ4', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='NONE', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='ZLIB', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='ZSTD', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SNAPPY', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4039,
-  serialized_end=4107,
-)
-_sym_db.RegisterEnumDescriptor(_COMPRESSIONTYPE)
-
-CompressionType = enum_type_wrapper.EnumTypeWrapper(_COMPRESSIONTYPE)
-_FUNCTIONSTATE = _descriptor.EnumDescriptor(
-  name='FunctionState',
-  full_name='proto.FunctionState',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='RUNNING', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='STOPPED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4109,
-  serialized_end=4150,
-)
-_sym_db.RegisterEnumDescriptor(_FUNCTIONSTATE)
-
-FunctionState = enum_type_wrapper.EnumTypeWrapper(_FUNCTIONSTATE)
-ATLEAST_ONCE = 0
-ATMOST_ONCE = 1
-EFFECTIVELY_ONCE = 2
-MANUAL = 3
-SHARED = 0
-FAILOVER = 1
-KEY_SHARED = 2
-LATEST = 0
-EARLIEST = 1
-LZ4 = 0
-NONE = 1
-ZLIB = 2
-ZSTD = 3
-SNAPPY = 4
-RUNNING = 0
-STOPPED = 1
-
-
-_FUNCTIONDETAILS_RUNTIME = _descriptor.EnumDescriptor(
-  name='Runtime',
-  full_name='proto.FunctionDetails.Runtime',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='JAVA', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='PYTHON', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='GO', index=2, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=848,
-  serialized_end=887,
-)
-_sym_db.RegisterEnumDescriptor(_FUNCTIONDETAILS_RUNTIME)
-
-_FUNCTIONDETAILS_COMPONENTTYPE = _descriptor.EnumDescriptor(
-  name='ComponentType',
-  full_name='proto.FunctionDetails.ComponentType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='FUNCTION', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SOURCE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SINK', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=889,
-  serialized_end=953,
-)
-_sym_db.RegisterEnumDescriptor(_FUNCTIONDETAILS_COMPONENTTYPE)
-
-_CRYPTOSPEC_FAILUREACTION = _descriptor.EnumDescriptor(
-  name='FailureAction',
-  full_name='proto.CryptoSpec.FailureAction',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='FAIL', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DISCARD', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONSUME', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SEND', index=3, number=10,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=1948,
-  serialized_end=2009,
-)
-_sym_db.RegisterEnumDescriptor(_CRYPTOSPEC_FAILUREACTION)
-
-
-_RESOURCES = _descriptor.Descriptor(
-  name='Resources',
-  full_name='proto.Resources',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='cpu', full_name='proto.Resources.cpu', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ram', full_name='proto.Resources.ram', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='disk', full_name='proto.Resources.disk', index=2,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=25,
-  serialized_end=76,
-)
-
-
-_RETRYDETAILS = _descriptor.Descriptor(
-  name='RetryDetails',
-  full_name='proto.RetryDetails',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='maxMessageRetries', full_name='proto.RetryDetails.maxMessageRetries', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='deadLetterTopic', full_name='proto.RetryDetails.deadLetterTopic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=78,
-  serialized_end=144,
-)
-
-
-_FUNCTIONDETAILS = _descriptor.Descriptor(
-  name='FunctionDetails',
-  full_name='proto.FunctionDetails',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='tenant', full_name='proto.FunctionDetails.tenant', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='namespace', full_name='proto.FunctionDetails.namespace', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='name', full_name='proto.FunctionDetails.name', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='className', full_name='proto.FunctionDetails.className', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='logTopic', full_name='proto.FunctionDetails.logTopic', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='processingGuarantees', full_name='proto.FunctionDetails.processingGuarantees', index=5,
-      number=6, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='userConfig', full_name='proto.FunctionDetails.userConfig', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='secretsMap', full_name='proto.FunctionDetails.secretsMap', index=7,
-      number=16, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='runtime', full_name='proto.FunctionDetails.runtime', index=8,
-      number=8, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='autoAck', full_name='proto.FunctionDetails.autoAck', index=9,
-      number=9, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='parallelism', full_name='proto.FunctionDetails.parallelism', index=10,
-      number=10, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='source', full_name='proto.FunctionDetails.source', index=11,
-      number=11, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sink', full_name='proto.FunctionDetails.sink', index=12,
-      number=12, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resources', full_name='proto.FunctionDetails.resources', index=13,
-      number=13, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='packageUrl', full_name='proto.FunctionDetails.packageUrl', index=14,
-      number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='retryDetails', full_name='proto.FunctionDetails.retryDetails', index=15,
-      number=15, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='runtimeFlags', full_name='proto.FunctionDetails.runtimeFlags', index=16,
-      number=17, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='componentType', full_name='proto.FunctionDetails.componentType', index=17,
-      number=18, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='customRuntimeOptions', full_name='proto.FunctionDetails.customRuntimeOptions', index=18,
-      number=19, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='builtin', full_name='proto.FunctionDetails.builtin', index=19,
-      number=20, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='retainOrdering', full_name='proto.FunctionDetails.retainOrdering', index=20,
-      number=21, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='retainKeyOrdering', full_name='proto.FunctionDetails.retainKeyOrdering', index=21,
-      number=22, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='subscriptionPosition', full_name='proto.FunctionDetails.subscriptionPosition', index=22,
-      number=23, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _FUNCTIONDETAILS_RUNTIME,
-    _FUNCTIONDETAILS_COMPONENTTYPE,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=147,
-  serialized_end=953,
-)
-
-
-_CONSUMERSPEC_RECEIVERQUEUESIZE = _descriptor.Descriptor(
-  name='ReceiverQueueSize',
-  full_name='proto.ConsumerSpec.ReceiverQueueSize',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.ConsumerSpec.ReceiverQueueSize.value', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1309,
-  serialized_end=1343,
-)
-
-_CONSUMERSPEC_SCHEMAPROPERTIESENTRY = _descriptor.Descriptor(
-  name='SchemaPropertiesEntry',
-  full_name='proto.ConsumerSpec.SchemaPropertiesEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.ConsumerSpec.SchemaPropertiesEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.ConsumerSpec.SchemaPropertiesEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1345,
-  serialized_end=1400,
-)
-
-_CONSUMERSPEC_CONSUMERPROPERTIESENTRY = _descriptor.Descriptor(
-  name='ConsumerPropertiesEntry',
-  full_name='proto.ConsumerSpec.ConsumerPropertiesEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.ConsumerSpec.ConsumerPropertiesEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.ConsumerSpec.ConsumerPropertiesEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1402,
-  serialized_end=1459,
-)
-
-_CONSUMERSPEC = _descriptor.Descriptor(
-  name='ConsumerSpec',
-  full_name='proto.ConsumerSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='schemaType', full_name='proto.ConsumerSpec.schemaType', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='serdeClassName', full_name='proto.ConsumerSpec.serdeClassName', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='isRegexPattern', full_name='proto.ConsumerSpec.isRegexPattern', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='receiverQueueSize', full_name='proto.ConsumerSpec.receiverQueueSize', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='schemaProperties', full_name='proto.ConsumerSpec.schemaProperties', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='consumerProperties', full_name='proto.ConsumerSpec.consumerProperties', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='cryptoSpec', full_name='proto.ConsumerSpec.cryptoSpec', index=6,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='poolMessages', full_name='proto.ConsumerSpec.poolMessages', index=7,
-      number=8, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_CONSUMERSPEC_RECEIVERQUEUESIZE, _CONSUMERSPEC_SCHEMAPROPERTIESENTRY, _CONSUMERSPEC_CONSUMERPROPERTIESENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=956,
-  serialized_end=1459,
-)
-
-
-_PRODUCERSPEC = _descriptor.Descriptor(
-  name='ProducerSpec',
-  full_name='proto.ProducerSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='maxPendingMessages', full_name='proto.ProducerSpec.maxPendingMessages', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='maxPendingMessagesAcrossPartitions', full_name='proto.ProducerSpec.maxPendingMessagesAcrossPartitions', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='useThreadLocalProducers', full_name='proto.ProducerSpec.useThreadLocalProducers', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='cryptoSpec', full_name='proto.ProducerSpec.cryptoSpec', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='batchBuilder', full_name='proto.ProducerSpec.batchBuilder', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='compressionType', full_name='proto.ProducerSpec.compressionType', index=5,
-      number=6, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1462,
-  serialized_end=1691,
-)
-
-
-_CRYPTOSPEC = _descriptor.Descriptor(
-  name='CryptoSpec',
-  full_name='proto.CryptoSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='cryptoKeyReaderClassName', full_name='proto.CryptoSpec.cryptoKeyReaderClassName', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='cryptoKeyReaderConfig', full_name='proto.CryptoSpec.cryptoKeyReaderConfig', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='producerEncryptionKeyName', full_name='proto.CryptoSpec.producerEncryptionKeyName', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='producerCryptoFailureAction', full_name='proto.CryptoSpec.producerCryptoFailureAction', index=3,
-      number=4, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='consumerCryptoFailureAction', full_name='proto.CryptoSpec.consumerCryptoFailureAction', index=4,
-      number=5, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CRYPTOSPEC_FAILUREACTION,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1694,
-  serialized_end=2009,
-)
-
-
-_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY = _descriptor.Descriptor(
-  name='TopicsToSerDeClassNameEntry',
-  full_name='proto.SourceSpec.TopicsToSerDeClassNameEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.SourceSpec.TopicsToSerDeClassNameEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.SourceSpec.TopicsToSerDeClassNameEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2489,
-  serialized_end=2550,
-)
-
-_SOURCESPEC_INPUTSPECSENTRY = _descriptor.Descriptor(
-  name='InputSpecsEntry',
-  full_name='proto.SourceSpec.InputSpecsEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.SourceSpec.InputSpecsEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.SourceSpec.InputSpecsEntry.value', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2552,
-  serialized_end=2622,
-)
-
-_SOURCESPEC = _descriptor.Descriptor(
-  name='SourceSpec',
-  full_name='proto.SourceSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='className', full_name='proto.SourceSpec.className', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='configs', full_name='proto.SourceSpec.configs', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='typeClassName', full_name='proto.SourceSpec.typeClassName', index=2,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='subscriptionType', full_name='proto.SourceSpec.subscriptionType', index=3,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topicsToSerDeClassName', full_name='proto.SourceSpec.topicsToSerDeClassName', index=4,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='inputSpecs', full_name='proto.SourceSpec.inputSpecs', index=5,
-      number=10, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timeoutMs', full_name='proto.SourceSpec.timeoutMs', index=6,
-      number=6, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topicsPattern', full_name='proto.SourceSpec.topicsPattern', index=7,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='builtin', full_name='proto.SourceSpec.builtin', index=8,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='subscriptionName', full_name='proto.SourceSpec.subscriptionName', index=9,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='cleanupSubscription', full_name='proto.SourceSpec.cleanupSubscription', index=10,
-      number=11, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='subscriptionPosition', full_name='proto.SourceSpec.subscriptionPosition', index=11,
-      number=12, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='negativeAckRedeliveryDelayMs', full_name='proto.SourceSpec.negativeAckRedeliveryDelayMs', index=12,
-      number=13, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY, _SOURCESPEC_INPUTSPECSENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2012,
-  serialized_end=2622,
-)
-
-
-_SINKSPEC_SCHEMAPROPERTIESENTRY = _descriptor.Descriptor(
-  name='SchemaPropertiesEntry',
-  full_name='proto.SinkSpec.SchemaPropertiesEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.SinkSpec.SchemaPropertiesEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.SinkSpec.SchemaPropertiesEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1345,
-  serialized_end=1400,
-)
-
-_SINKSPEC_CONSUMERPROPERTIESENTRY = _descriptor.Descriptor(
-  name='ConsumerPropertiesEntry',
-  full_name='proto.SinkSpec.ConsumerPropertiesEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.SinkSpec.ConsumerPropertiesEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.SinkSpec.ConsumerPropertiesEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1402,
-  serialized_end=1459,
-)
-
-_SINKSPEC = _descriptor.Descriptor(
-  name='SinkSpec',
-  full_name='proto.SinkSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='className', full_name='proto.SinkSpec.className', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='configs', full_name='proto.SinkSpec.configs', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='typeClassName', full_name='proto.SinkSpec.typeClassName', index=2,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='proto.SinkSpec.topic', index=3,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='producerSpec', full_name='proto.SinkSpec.producerSpec', index=4,
-      number=11, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='serDeClassName', full_name='proto.SinkSpec.serDeClassName', index=5,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='builtin', full_name='proto.SinkSpec.builtin', index=6,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='schemaType', full_name='proto.SinkSpec.schemaType', index=7,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='forwardSourceMessageProperty', full_name='proto.SinkSpec.forwardSourceMessageProperty', index=8,
-      number=8, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='schemaProperties', full_name='proto.SinkSpec.schemaProperties', index=9,
-      number=9, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='consumerProperties', full_name='proto.SinkSpec.consumerProperties', index=10,
-      number=10, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_SINKSPEC_SCHEMAPROPERTIESENTRY, _SINKSPEC_CONSUMERPROPERTIESENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2625,
-  serialized_end=3101,
-)
-
-
-_PACKAGELOCATIONMETADATA = _descriptor.Descriptor(
-  name='PackageLocationMetaData',
-  full_name='proto.PackageLocationMetaData',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='packagePath', full_name='proto.PackageLocationMetaData.packagePath', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='originalFileName', full_name='proto.PackageLocationMetaData.originalFileName', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3103,
-  serialized_end=3175,
-)
-
-
-_FUNCTIONMETADATA_INSTANCESTATESENTRY = _descriptor.Descriptor(
-  name='InstanceStatesEntry',
-  full_name='proto.FunctionMetaData.InstanceStatesEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.FunctionMetaData.InstanceStatesEntry.key', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.FunctionMetaData.InstanceStatesEntry.value', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3545,
-  serialized_end=3620,
-)
-
-_FUNCTIONMETADATA = _descriptor.Descriptor(
-  name='FunctionMetaData',
-  full_name='proto.FunctionMetaData',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='functionDetails', full_name='proto.FunctionMetaData.functionDetails', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='packageLocation', full_name='proto.FunctionMetaData.packageLocation', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='version', full_name='proto.FunctionMetaData.version', index=2,
-      number=3, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='createTime', full_name='proto.FunctionMetaData.createTime', index=3,
-      number=4, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='instanceStates', full_name='proto.FunctionMetaData.instanceStates', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='functionAuthSpec', full_name='proto.FunctionMetaData.functionAuthSpec', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='transformFunctionPackageLocation', full_name='proto.FunctionMetaData.transformFunctionPackageLocation', index=6,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_FUNCTIONMETADATA_INSTANCESTATESENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3178,
-  serialized_end=3620,
-)
-
-
-_FUNCTIONAUTHENTICATIONSPEC = _descriptor.Descriptor(
-  name='FunctionAuthenticationSpec',
-  full_name='proto.FunctionAuthenticationSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='data', full_name='proto.FunctionAuthenticationSpec.data', index=0,
-      number=1, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"",
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='provider', full_name='proto.FunctionAuthenticationSpec.provider', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3622,
-  serialized_end=3682,
-)
-
-
-_INSTANCE = _descriptor.Descriptor(
-  name='Instance',
-  full_name='proto.Instance',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='functionMetaData', full_name='proto.Instance.functionMetaData', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='instanceId', full_name='proto.Instance.instanceId', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3684,
-  serialized_end=3765,
-)
-
-
-_ASSIGNMENT = _descriptor.Descriptor(
-  name='Assignment',
-  full_name='proto.Assignment',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='instance', full_name='proto.Assignment.instance', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='workerId', full_name='proto.Assignment.workerId', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3767,
-  serialized_end=3832,
-)
-
-_FUNCTIONDETAILS.fields_by_name['processingGuarantees'].enum_type = _PROCESSINGGUARANTEES
-_FUNCTIONDETAILS.fields_by_name['runtime'].enum_type = _FUNCTIONDETAILS_RUNTIME
-_FUNCTIONDETAILS.fields_by_name['source'].message_type = _SOURCESPEC
-_FUNCTIONDETAILS.fields_by_name['sink'].message_type = _SINKSPEC
-_FUNCTIONDETAILS.fields_by_name['resources'].message_type = _RESOURCES
-_FUNCTIONDETAILS.fields_by_name['retryDetails'].message_type = _RETRYDETAILS
-_FUNCTIONDETAILS.fields_by_name['componentType'].enum_type = _FUNCTIONDETAILS_COMPONENTTYPE
-_FUNCTIONDETAILS.fields_by_name['subscriptionPosition'].enum_type = _SUBSCRIPTIONPOSITION
-_FUNCTIONDETAILS_RUNTIME.containing_type = _FUNCTIONDETAILS
-_FUNCTIONDETAILS_COMPONENTTYPE.containing_type = _FUNCTIONDETAILS
-_CONSUMERSPEC_RECEIVERQUEUESIZE.containing_type = _CONSUMERSPEC
-_CONSUMERSPEC_SCHEMAPROPERTIESENTRY.containing_type = _CONSUMERSPEC
-_CONSUMERSPEC_CONSUMERPROPERTIESENTRY.containing_type = _CONSUMERSPEC
-_CONSUMERSPEC.fields_by_name['receiverQueueSize'].message_type = _CONSUMERSPEC_RECEIVERQUEUESIZE
-_CONSUMERSPEC.fields_by_name['schemaProperties'].message_type = _CONSUMERSPEC_SCHEMAPROPERTIESENTRY
-_CONSUMERSPEC.fields_by_name['consumerProperties'].message_type = _CONSUMERSPEC_CONSUMERPROPERTIESENTRY
-_CONSUMERSPEC.fields_by_name['cryptoSpec'].message_type = _CRYPTOSPEC
-_PRODUCERSPEC.fields_by_name['cryptoSpec'].message_type = _CRYPTOSPEC
-_PRODUCERSPEC.fields_by_name['compressionType'].enum_type = _COMPRESSIONTYPE
-_CRYPTOSPEC.fields_by_name['producerCryptoFailureAction'].enum_type = _CRYPTOSPEC_FAILUREACTION
-_CRYPTOSPEC.fields_by_name['consumerCryptoFailureAction'].enum_type = _CRYPTOSPEC_FAILUREACTION
-_CRYPTOSPEC_FAILUREACTION.containing_type = _CRYPTOSPEC
-_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY.containing_type = _SOURCESPEC
-_SOURCESPEC_INPUTSPECSENTRY.fields_by_name['value'].message_type = _CONSUMERSPEC
-_SOURCESPEC_INPUTSPECSENTRY.containing_type = _SOURCESPEC
-_SOURCESPEC.fields_by_name['subscriptionType'].enum_type = _SUBSCRIPTIONTYPE
-_SOURCESPEC.fields_by_name['topicsToSerDeClassName'].message_type = _SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY
-_SOURCESPEC.fields_by_name['inputSpecs'].message_type = _SOURCESPEC_INPUTSPECSENTRY
-_SOURCESPEC.fields_by_name['subscriptionPosition'].enum_type = _SUBSCRIPTIONPOSITION
-_SINKSPEC_SCHEMAPROPERTIESENTRY.containing_type = _SINKSPEC
-_SINKSPEC_CONSUMERPROPERTIESENTRY.containing_type = _SINKSPEC
-_SINKSPEC.fields_by_name['producerSpec'].message_type = _PRODUCERSPEC
-_SINKSPEC.fields_by_name['schemaProperties'].message_type = _SINKSPEC_SCHEMAPROPERTIESENTRY
-_SINKSPEC.fields_by_name['consumerProperties'].message_type = _SINKSPEC_CONSUMERPROPERTIESENTRY
-_FUNCTIONMETADATA_INSTANCESTATESENTRY.fields_by_name['value'].enum_type = _FUNCTIONSTATE
-_FUNCTIONMETADATA_INSTANCESTATESENTRY.containing_type = _FUNCTIONMETADATA
-_FUNCTIONMETADATA.fields_by_name['functionDetails'].message_type = _FUNCTIONDETAILS
-_FUNCTIONMETADATA.fields_by_name['packageLocation'].message_type = _PACKAGELOCATIONMETADATA
-_FUNCTIONMETADATA.fields_by_name['instanceStates'].message_type = _FUNCTIONMETADATA_INSTANCESTATESENTRY
-_FUNCTIONMETADATA.fields_by_name['functionAuthSpec'].message_type = _FUNCTIONAUTHENTICATIONSPEC
-_FUNCTIONMETADATA.fields_by_name['transformFunctionPackageLocation'].message_type = _PACKAGELOCATIONMETADATA
-_INSTANCE.fields_by_name['functionMetaData'].message_type = _FUNCTIONMETADATA
-_ASSIGNMENT.fields_by_name['instance'].message_type = _INSTANCE
-DESCRIPTOR.message_types_by_name['Resources'] = _RESOURCES
-DESCRIPTOR.message_types_by_name['RetryDetails'] = _RETRYDETAILS
-DESCRIPTOR.message_types_by_name['FunctionDetails'] = _FUNCTIONDETAILS
-DESCRIPTOR.message_types_by_name['ConsumerSpec'] = _CONSUMERSPEC
-DESCRIPTOR.message_types_by_name['ProducerSpec'] = _PRODUCERSPEC
-DESCRIPTOR.message_types_by_name['CryptoSpec'] = _CRYPTOSPEC
-DESCRIPTOR.message_types_by_name['SourceSpec'] = _SOURCESPEC
-DESCRIPTOR.message_types_by_name['SinkSpec'] = _SINKSPEC
-DESCRIPTOR.message_types_by_name['PackageLocationMetaData'] = _PACKAGELOCATIONMETADATA
-DESCRIPTOR.message_types_by_name['FunctionMetaData'] = _FUNCTIONMETADATA
-DESCRIPTOR.message_types_by_name['FunctionAuthenticationSpec'] = _FUNCTIONAUTHENTICATIONSPEC
-DESCRIPTOR.message_types_by_name['Instance'] = _INSTANCE
-DESCRIPTOR.message_types_by_name['Assignment'] = _ASSIGNMENT
-DESCRIPTOR.enum_types_by_name['ProcessingGuarantees'] = _PROCESSINGGUARANTEES
-DESCRIPTOR.enum_types_by_name['SubscriptionType'] = _SUBSCRIPTIONTYPE
-DESCRIPTOR.enum_types_by_name['SubscriptionPosition'] = _SUBSCRIPTIONPOSITION
-DESCRIPTOR.enum_types_by_name['CompressionType'] = _COMPRESSIONTYPE
-DESCRIPTOR.enum_types_by_name['FunctionState'] = _FUNCTIONSTATE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Resources = _reflection.GeneratedProtocolMessageType('Resources', (_message.Message,), {
-  'DESCRIPTOR' : _RESOURCES,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.Resources)
-  })
-_sym_db.RegisterMessage(Resources)
-
-RetryDetails = _reflection.GeneratedProtocolMessageType('RetryDetails', (_message.Message,), {
-  'DESCRIPTOR' : _RETRYDETAILS,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.RetryDetails)
-  })
-_sym_db.RegisterMessage(RetryDetails)
-
-FunctionDetails = _reflection.GeneratedProtocolMessageType('FunctionDetails', (_message.Message,), {
-  'DESCRIPTOR' : _FUNCTIONDETAILS,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.FunctionDetails)
-  })
-_sym_db.RegisterMessage(FunctionDetails)
-
-ConsumerSpec = _reflection.GeneratedProtocolMessageType('ConsumerSpec', (_message.Message,), {
-
-  'ReceiverQueueSize' : _reflection.GeneratedProtocolMessageType('ReceiverQueueSize', (_message.Message,), {
-    'DESCRIPTOR' : _CONSUMERSPEC_RECEIVERQUEUESIZE,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.ConsumerSpec.ReceiverQueueSize)
-    })
-  ,
-
-  'SchemaPropertiesEntry' : _reflection.GeneratedProtocolMessageType('SchemaPropertiesEntry', (_message.Message,), {
-    'DESCRIPTOR' : _CONSUMERSPEC_SCHEMAPROPERTIESENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.ConsumerSpec.SchemaPropertiesEntry)
-    })
-  ,
-
-  'ConsumerPropertiesEntry' : _reflection.GeneratedProtocolMessageType('ConsumerPropertiesEntry', (_message.Message,), {
-    'DESCRIPTOR' : _CONSUMERSPEC_CONSUMERPROPERTIESENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.ConsumerSpec.ConsumerPropertiesEntry)
-    })
-  ,
-  'DESCRIPTOR' : _CONSUMERSPEC,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.ConsumerSpec)
-  })
-_sym_db.RegisterMessage(ConsumerSpec)
-_sym_db.RegisterMessage(ConsumerSpec.ReceiverQueueSize)
-_sym_db.RegisterMessage(ConsumerSpec.SchemaPropertiesEntry)
-_sym_db.RegisterMessage(ConsumerSpec.ConsumerPropertiesEntry)
-
-ProducerSpec = _reflection.GeneratedProtocolMessageType('ProducerSpec', (_message.Message,), {
-  'DESCRIPTOR' : _PRODUCERSPEC,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.ProducerSpec)
-  })
-_sym_db.RegisterMessage(ProducerSpec)
-
-CryptoSpec = _reflection.GeneratedProtocolMessageType('CryptoSpec', (_message.Message,), {
-  'DESCRIPTOR' : _CRYPTOSPEC,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.CryptoSpec)
-  })
-_sym_db.RegisterMessage(CryptoSpec)
-
-SourceSpec = _reflection.GeneratedProtocolMessageType('SourceSpec', (_message.Message,), {
-
-  'TopicsToSerDeClassNameEntry' : _reflection.GeneratedProtocolMessageType('TopicsToSerDeClassNameEntry', (_message.Message,), {
-    'DESCRIPTOR' : _SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.SourceSpec.TopicsToSerDeClassNameEntry)
-    })
-  ,
-
-  'InputSpecsEntry' : _reflection.GeneratedProtocolMessageType('InputSpecsEntry', (_message.Message,), {
-    'DESCRIPTOR' : _SOURCESPEC_INPUTSPECSENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.SourceSpec.InputSpecsEntry)
-    })
-  ,
-  'DESCRIPTOR' : _SOURCESPEC,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.SourceSpec)
-  })
-_sym_db.RegisterMessage(SourceSpec)
-_sym_db.RegisterMessage(SourceSpec.TopicsToSerDeClassNameEntry)
-_sym_db.RegisterMessage(SourceSpec.InputSpecsEntry)
-
-SinkSpec = _reflection.GeneratedProtocolMessageType('SinkSpec', (_message.Message,), {
-
-  'SchemaPropertiesEntry' : _reflection.GeneratedProtocolMessageType('SchemaPropertiesEntry', (_message.Message,), {
-    'DESCRIPTOR' : _SINKSPEC_SCHEMAPROPERTIESENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.SinkSpec.SchemaPropertiesEntry)
-    })
-  ,
-
-  'ConsumerPropertiesEntry' : _reflection.GeneratedProtocolMessageType('ConsumerPropertiesEntry', (_message.Message,), {
-    'DESCRIPTOR' : _SINKSPEC_CONSUMERPROPERTIESENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.SinkSpec.ConsumerPropertiesEntry)
-    })
-  ,
-  'DESCRIPTOR' : _SINKSPEC,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.SinkSpec)
-  })
-_sym_db.RegisterMessage(SinkSpec)
-_sym_db.RegisterMessage(SinkSpec.SchemaPropertiesEntry)
-_sym_db.RegisterMessage(SinkSpec.ConsumerPropertiesEntry)
-
-PackageLocationMetaData = _reflection.GeneratedProtocolMessageType('PackageLocationMetaData', (_message.Message,), {
-  'DESCRIPTOR' : _PACKAGELOCATIONMETADATA,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.PackageLocationMetaData)
-  })
-_sym_db.RegisterMessage(PackageLocationMetaData)
-
-FunctionMetaData = _reflection.GeneratedProtocolMessageType('FunctionMetaData', (_message.Message,), {
-
-  'InstanceStatesEntry' : _reflection.GeneratedProtocolMessageType('InstanceStatesEntry', (_message.Message,), {
-    'DESCRIPTOR' : _FUNCTIONMETADATA_INSTANCESTATESENTRY,
-    '__module__' : 'Function_pb2'
-    # @@protoc_insertion_point(class_scope:proto.FunctionMetaData.InstanceStatesEntry)
-    })
-  ,
-  'DESCRIPTOR' : _FUNCTIONMETADATA,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.FunctionMetaData)
-  })
-_sym_db.RegisterMessage(FunctionMetaData)
-_sym_db.RegisterMessage(FunctionMetaData.InstanceStatesEntry)
-
-FunctionAuthenticationSpec = _reflection.GeneratedProtocolMessageType('FunctionAuthenticationSpec', (_message.Message,), {
-  'DESCRIPTOR' : _FUNCTIONAUTHENTICATIONSPEC,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.FunctionAuthenticationSpec)
-  })
-_sym_db.RegisterMessage(FunctionAuthenticationSpec)
-
-Instance = _reflection.GeneratedProtocolMessageType('Instance', (_message.Message,), {
-  'DESCRIPTOR' : _INSTANCE,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.Instance)
-  })
-_sym_db.RegisterMessage(Instance)
-
-Assignment = _reflection.GeneratedProtocolMessageType('Assignment', (_message.Message,), {
-  'DESCRIPTOR' : _ASSIGNMENT,
-  '__module__' : 'Function_pb2'
-  # @@protoc_insertion_point(class_scope:proto.Assignment)
-  })
-_sym_db.RegisterMessage(Assignment)
-
-
-DESCRIPTOR._options = None
-_FUNCTIONDETAILS.fields_by_name['autoAck']._options = None
-_CONSUMERSPEC_SCHEMAPROPERTIESENTRY._options = None
-_CONSUMERSPEC_CONSUMERPROPERTIESENTRY._options = None
-_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY._options = None
-_SOURCESPEC_INPUTSPECSENTRY._options = None
-_SOURCESPEC.fields_by_name['topicsToSerDeClassName']._options = None
-_SOURCESPEC.fields_by_name['topicsPattern']._options = None
-_SINKSPEC_SCHEMAPROPERTIESENTRY._options = None
-_SINKSPEC_CONSUMERPROPERTIESENTRY._options = None
-_FUNCTIONMETADATA_INSTANCESTATESENTRY._options = None
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x46unction.proto\x12\x05proto\"3\n\tResources\x12\x0b\n\x03\x63pu\x18\x01 \x01(\x01\x12\x0b\n\x03ram\x18\x02 \x01(\x03\x12\x0c\n\x04\x64isk\x18\x03 \x01(\x03\"B\n\x0cRetryDetails\x12\x19\n\x11maxMessageRetries\x18\x01 \x01(\x05\x12\x17\n\x0f\x64\x65\x61\x64LetterTopic\x18\x02 \x01(\t\"\xa6\x06\n\x0f\x46unctionDetails\x12\x0e\n\x06tenant\x18\x01 \x01(\t\x12\x11\n\tnamespace\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t [...]
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Function_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+  _globals['DESCRIPTOR']._loaded_options = None
+  _globals['DESCRIPTOR']._serialized_options = b'\n!org.apache.pulsar.functions.protoB\010Function'
+  _globals['_FUNCTIONDETAILS'].fields_by_name['autoAck']._loaded_options = None
+  _globals['_FUNCTIONDETAILS'].fields_by_name['autoAck']._serialized_options = b'\030\001'
+  _globals['_CONSUMERSPEC_SCHEMAPROPERTIESENTRY']._loaded_options = None
+  _globals['_CONSUMERSPEC_SCHEMAPROPERTIESENTRY']._serialized_options = b'8\001'
+  _globals['_CONSUMERSPEC_CONSUMERPROPERTIESENTRY']._loaded_options = None
+  _globals['_CONSUMERSPEC_CONSUMERPROPERTIESENTRY']._serialized_options = b'8\001'
+  _globals['_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY']._loaded_options = None
+  _globals['_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY']._serialized_options = b'8\001'
+  _globals['_SOURCESPEC_INPUTSPECSENTRY']._loaded_options = None
+  _globals['_SOURCESPEC_INPUTSPECSENTRY']._serialized_options = b'8\001'
+  _globals['_SOURCESPEC'].fields_by_name['topicsToSerDeClassName']._loaded_options = None
+  _globals['_SOURCESPEC'].fields_by_name['topicsToSerDeClassName']._serialized_options = b'\030\001'
+  _globals['_SOURCESPEC'].fields_by_name['topicsPattern']._loaded_options = None
+  _globals['_SOURCESPEC'].fields_by_name['topicsPattern']._serialized_options = b'\030\001'
+  _globals['_SINKSPEC_SCHEMAPROPERTIESENTRY']._loaded_options = None
+  _globals['_SINKSPEC_SCHEMAPROPERTIESENTRY']._serialized_options = b'8\001'
+  _globals['_SINKSPEC_CONSUMERPROPERTIESENTRY']._loaded_options = None
+  _globals['_SINKSPEC_CONSUMERPROPERTIESENTRY']._serialized_options = b'8\001'
+  _globals['_FUNCTIONMETADATA_INSTANCESTATESENTRY']._loaded_options = None
+  _globals['_FUNCTIONMETADATA_INSTANCESTATESENTRY']._serialized_options = b'8\001'
+  _globals['_PROCESSINGGUARANTEES']._serialized_start=4243
+  _globals['_PROCESSINGGUARANTEES']._serialized_end=4334
+  _globals['_SUBSCRIPTIONTYPE']._serialized_start=4336
+  _globals['_SUBSCRIPTIONTYPE']._serialized_end=4396
+  _globals['_SUBSCRIPTIONPOSITION']._serialized_start=4398
+  _globals['_SUBSCRIPTIONPOSITION']._serialized_end=4446
+  _globals['_COMPRESSIONTYPE']._serialized_start=4448
+  _globals['_COMPRESSIONTYPE']._serialized_end=4516
+  _globals['_FUNCTIONSTATE']._serialized_start=4518
+  _globals['_FUNCTIONSTATE']._serialized_end=4559
+  _globals['_RESOURCES']._serialized_start=25
+  _globals['_RESOURCES']._serialized_end=76
+  _globals['_RETRYDETAILS']._serialized_start=78
+  _globals['_RETRYDETAILS']._serialized_end=144
+  _globals['_FUNCTIONDETAILS']._serialized_start=147
+  _globals['_FUNCTIONDETAILS']._serialized_end=953
+  _globals['_FUNCTIONDETAILS_RUNTIME']._serialized_start=848
+  _globals['_FUNCTIONDETAILS_RUNTIME']._serialized_end=887
+  _globals['_FUNCTIONDETAILS_COMPONENTTYPE']._serialized_start=889
+  _globals['_FUNCTIONDETAILS_COMPONENTTYPE']._serialized_end=953
+  _globals['_CONSUMERSPEC']._serialized_start=956
+  _globals['_CONSUMERSPEC']._serialized_end=1532
+  _globals['_CONSUMERSPEC_RECEIVERQUEUESIZE']._serialized_start=1382
+  _globals['_CONSUMERSPEC_RECEIVERQUEUESIZE']._serialized_end=1416
+  _globals['_CONSUMERSPEC_SCHEMAPROPERTIESENTRY']._serialized_start=1418
+  _globals['_CONSUMERSPEC_SCHEMAPROPERTIESENTRY']._serialized_end=1473
+  _globals['_CONSUMERSPEC_CONSUMERPROPERTIESENTRY']._serialized_start=1475
+  _globals['_CONSUMERSPEC_CONSUMERPROPERTIESENTRY']._serialized_end=1532
+  _globals['_PRODUCERSPEC']._serialized_start=1535
+  _globals['_PRODUCERSPEC']._serialized_end=1807
+  _globals['_CRYPTOSPEC']._serialized_start=1810
+  _globals['_CRYPTOSPEC']._serialized_end=2125
+  _globals['_CRYPTOSPEC_FAILUREACTION']._serialized_start=2064
+  _globals['_CRYPTOSPEC_FAILUREACTION']._serialized_end=2125
+  _globals['_MESSAGEPAYLOADPROCESSORSPEC']._serialized_start=2127
+  _globals['_MESSAGEPAYLOADPROCESSORSPEC']._serialized_end=2192
+  _globals['_BATCHINGSPEC']._serialized_start=2195
+  _globals['_BATCHINGSPEC']._serialized_end=2396
+  _globals['_SOURCESPEC']._serialized_start=2399
+  _globals['_SOURCESPEC']._serialized_end=3031
+  _globals['_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY']._serialized_start=2898
+  _globals['_SOURCESPEC_TOPICSTOSERDECLASSNAMEENTRY']._serialized_end=2959
+  _globals['_SOURCESPEC_INPUTSPECSENTRY']._serialized_start=2961
+  _globals['_SOURCESPEC_INPUTSPECSENTRY']._serialized_end=3031
+  _globals['_SINKSPEC']._serialized_start=3034
+  _globals['_SINKSPEC']._serialized_end=3510
+  _globals['_SINKSPEC_SCHEMAPROPERTIESENTRY']._serialized_start=1418
+  _globals['_SINKSPEC_SCHEMAPROPERTIESENTRY']._serialized_end=1473
+  _globals['_SINKSPEC_CONSUMERPROPERTIESENTRY']._serialized_start=1475
+  _globals['_SINKSPEC_CONSUMERPROPERTIESENTRY']._serialized_end=1532
+  _globals['_PACKAGELOCATIONMETADATA']._serialized_start=3512
+  _globals['_PACKAGELOCATIONMETADATA']._serialized_end=3584
+  _globals['_FUNCTIONMETADATA']._serialized_start=3587
+  _globals['_FUNCTIONMETADATA']._serialized_end=4029
+  _globals['_FUNCTIONMETADATA_INSTANCESTATESENTRY']._serialized_start=3954
+  _globals['_FUNCTIONMETADATA_INSTANCESTATESENTRY']._serialized_end=4029
+  _globals['_FUNCTIONAUTHENTICATIONSPEC']._serialized_start=4031
+  _globals['_FUNCTIONAUTHENTICATIONSPEC']._serialized_end=4091
+  _globals['_INSTANCE']._serialized_start=4093
+  _globals['_INSTANCE']._serialized_end=4174
+  _globals['_ASSIGNMENT']._serialized_start=4176
+  _globals['_ASSIGNMENT']._serialized_end=4241
 # @@protoc_insertion_point(module_scope)
diff --git a/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2.py b/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2.py
index d1ba3bb0ed0..e967a2e5ab4 100644
--- a/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2.py
+++ b/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2.py
@@ -1,29 +1,14 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
+# NO CHECKED-IN PROTOBUF GENCODE
 # source: InstanceCommunication.proto
+# Protobuf Python Version: 6.31.0
 """Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import runtime_version as _runtime_version
 from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -32,639 +17,32 @@ _sym_db = _symbol_database.Default()
 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='InstanceCommunication.proto',
-  package='proto',
-  syntax='proto3',
-  serialized_options=b'\n!org.apache.pulsar.functions.protoB\025InstanceCommunication',
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x1bInstanceCommunication.proto\x12\x05proto\x1a\x1bgoogle/protobuf/empty.proto\"\xc4\x05\n\x0e\x46unctionStatus\x12\x0f\n\x07running\x18\x01 \x01(\x08\x12\x18\n\x10\x66\x61ilureException\x18\x02 \x01(\t\x12\x13\n\x0bnumRestarts\x18\x03 \x01(\x03\x12\x13\n\x0bnumReceived\x18\x11 \x01(\x03\x12 \n\x18numSuccessfullyProcessed\x18\x05 \x01(\x03\x12\x19\n\x11numUserExceptions\x18\x06 \x01(\x03\x12H\n\x14latestUserExceptions\x18\x07 \x03(\x0b\x32*.proto.FunctionStatus.Excep [...]
-  ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
-
-
-
-
-_FUNCTIONSTATUS_EXCEPTIONINFORMATION = _descriptor.Descriptor(
-  name='ExceptionInformation',
-  full_name='proto.FunctionStatus.ExceptionInformation',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='exceptionString', full_name='proto.FunctionStatus.ExceptionInformation.exceptionString', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='msSinceEpoch', full_name='proto.FunctionStatus.ExceptionInformation.msSinceEpoch', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=707,
-  serialized_end=776,
-)
-
-_FUNCTIONSTATUS = _descriptor.Descriptor(
-  name='FunctionStatus',
-  full_name='proto.FunctionStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='running', full_name='proto.FunctionStatus.running', index=0,
-      number=1, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='failureException', full_name='proto.FunctionStatus.failureException', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numRestarts', full_name='proto.FunctionStatus.numRestarts', index=2,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numReceived', full_name='proto.FunctionStatus.numReceived', index=3,
-      number=17, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numSuccessfullyProcessed', full_name='proto.FunctionStatus.numSuccessfullyProcessed', index=4,
-      number=5, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numUserExceptions', full_name='proto.FunctionStatus.numUserExceptions', index=5,
-      number=6, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='latestUserExceptions', full_name='proto.FunctionStatus.latestUserExceptions', index=6,
-      number=7, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numSystemExceptions', full_name='proto.FunctionStatus.numSystemExceptions', index=7,
-      number=8, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='latestSystemExceptions', full_name='proto.FunctionStatus.latestSystemExceptions', index=8,
-      number=9, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numSourceExceptions', full_name='proto.FunctionStatus.numSourceExceptions', index=9,
-      number=18, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='latestSourceExceptions', full_name='proto.FunctionStatus.latestSourceExceptions', index=10,
-      number=19, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='numSinkExceptions', full_name='proto.FunctionStatus.numSinkExceptions', index=11,
-      number=20, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='latestSinkExceptions', full_name='proto.FunctionStatus.latestSinkExceptions', index=12,
-      number=21, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='averageLatency', full_name='proto.FunctionStatus.averageLatency', index=13,
-      number=12, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='lastInvocationTime', full_name='proto.FunctionStatus.lastInvocationTime', index=14,
-      number=13, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='instanceId', full_name='proto.FunctionStatus.instanceId', index=15,
-      number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='workerId', full_name='proto.FunctionStatus.workerId', index=16,
-      number=16, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_FUNCTIONSTATUS_EXCEPTIONINFORMATION, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=68,
-  serialized_end=776,
-)
-
-
-_FUNCTIONSTATUSLIST = _descriptor.Descriptor(
-  name='FunctionStatusList',
-  full_name='proto.FunctionStatusList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='error', full_name='proto.FunctionStatusList.error', index=0,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='functionStatusList', full_name='proto.FunctionStatusList.functionStatusList', index=1,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=778,
-  serialized_end=864,
-)
-
-
-_METRICSDATA_USERMETRICSENTRY = _descriptor.Descriptor(
-  name='UserMetricsEntry',
-  full_name='proto.MetricsData.UserMetricsEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='proto.MetricsData.UserMetricsEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='proto.MetricsData.UserMetricsEntry.value', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=b'8\001',
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1281,
-  serialized_end=1331,
-)
-
-_METRICSDATA = _descriptor.Descriptor(
-  name='MetricsData',
-  full_name='proto.MetricsData',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='receivedTotal', full_name='proto.MetricsData.receivedTotal', index=0,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='receivedTotal_1min', full_name='proto.MetricsData.receivedTotal_1min', index=1,
-      number=10, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='processedSuccessfullyTotal', full_name='proto.MetricsData.processedSuccessfullyTotal', index=2,
-      number=4, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='processedSuccessfullyTotal_1min', full_name='proto.MetricsData.processedSuccessfullyTotal_1min', index=3,
-      number=12, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='systemExceptionsTotal', full_name='proto.MetricsData.systemExceptionsTotal', index=4,
-      number=5, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='systemExceptionsTotal_1min', full_name='proto.MetricsData.systemExceptionsTotal_1min', index=5,
-      number=13, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='userExceptionsTotal', full_name='proto.MetricsData.userExceptionsTotal', index=6,
-      number=6, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='userExceptionsTotal_1min', full_name='proto.MetricsData.userExceptionsTotal_1min', index=7,
-      number=14, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='avgProcessLatency', full_name='proto.MetricsData.avgProcessLatency', index=8,
-      number=7, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='avgProcessLatency_1min', full_name='proto.MetricsData.avgProcessLatency_1min', index=9,
-      number=15, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='lastInvocation', full_name='proto.MetricsData.lastInvocation', index=10,
-      number=8, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='userMetrics', full_name='proto.MetricsData.userMetrics', index=11,
-      number=9, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_METRICSDATA_USERMETRICSENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=867,
-  serialized_end=1331,
-)
-
-
-_HEALTHCHECKRESULT = _descriptor.Descriptor(
-  name='HealthCheckResult',
-  full_name='proto.HealthCheckResult',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='success', full_name='proto.HealthCheckResult.success', index=0,
-      number=1, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1333,
-  serialized_end=1369,
-)
-
-
-_METRICS_INSTANCEMETRICS = _descriptor.Descriptor(
-  name='InstanceMetrics',
-  full_name='proto.Metrics.InstanceMetrics',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='proto.Metrics.InstanceMetrics.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='instanceId', full_name='proto.Metrics.InstanceMetrics.instanceId', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='metricsData', full_name='proto.Metrics.InstanceMetrics.metricsData', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1432,
-  serialized_end=1524,
-)
-
-_METRICS = _descriptor.Descriptor(
-  name='Metrics',
-  full_name='proto.Metrics',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='metrics', full_name='proto.Metrics.metrics', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[_METRICS_INSTANCEMETRICS, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1372,
-  serialized_end=1524,
-)
-
-_FUNCTIONSTATUS_EXCEPTIONINFORMATION.containing_type = _FUNCTIONSTATUS
-_FUNCTIONSTATUS.fields_by_name['latestUserExceptions'].message_type = _FUNCTIONSTATUS_EXCEPTIONINFORMATION
-_FUNCTIONSTATUS.fields_by_name['latestSystemExceptions'].message_type = _FUNCTIONSTATUS_EXCEPTIONINFORMATION
-_FUNCTIONSTATUS.fields_by_name['latestSourceExceptions'].message_type = _FUNCTIONSTATUS_EXCEPTIONINFORMATION
-_FUNCTIONSTATUS.fields_by_name['latestSinkExceptions'].message_type = _FUNCTIONSTATUS_EXCEPTIONINFORMATION
-_FUNCTIONSTATUSLIST.fields_by_name['functionStatusList'].message_type = _FUNCTIONSTATUS
-_METRICSDATA_USERMETRICSENTRY.containing_type = _METRICSDATA
-_METRICSDATA.fields_by_name['userMetrics'].message_type = _METRICSDATA_USERMETRICSENTRY
-_METRICS_INSTANCEMETRICS.fields_by_name['metricsData'].message_type = _METRICSDATA
-_METRICS_INSTANCEMETRICS.containing_type = _METRICS
-_METRICS.fields_by_name['metrics'].message_type = _METRICS_INSTANCEMETRICS
-DESCRIPTOR.message_types_by_name['FunctionStatus'] = _FUNCTIONSTATUS
-DESCRIPTOR.message_types_by_name['FunctionStatusList'] = _FUNCTIONSTATUSLIST
-DESCRIPTOR.message_types_by_name['MetricsData'] = _METRICSDATA
-DESCRIPTOR.message_types_by_name['HealthCheckResult'] = _HEALTHCHECKRESULT
-DESCRIPTOR.message_types_by_name['Metrics'] = _METRICS
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-FunctionStatus = _reflection.GeneratedProtocolMessageType('FunctionStatus', (_message.Message,), {
-
-  'ExceptionInformation' : _reflection.GeneratedProtocolMessageType('ExceptionInformation', (_message.Message,), {
-    'DESCRIPTOR' : _FUNCTIONSTATUS_EXCEPTIONINFORMATION,
-    '__module__' : 'InstanceCommunication_pb2'
-    # @@protoc_insertion_point(class_scope:proto.FunctionStatus.ExceptionInformation)
-    })
-  ,
-  'DESCRIPTOR' : _FUNCTIONSTATUS,
-  '__module__' : 'InstanceCommunication_pb2'
-  # @@protoc_insertion_point(class_scope:proto.FunctionStatus)
-  })
-_sym_db.RegisterMessage(FunctionStatus)
-_sym_db.RegisterMessage(FunctionStatus.ExceptionInformation)
-
-FunctionStatusList = _reflection.GeneratedProtocolMessageType('FunctionStatusList', (_message.Message,), {
-  'DESCRIPTOR' : _FUNCTIONSTATUSLIST,
-  '__module__' : 'InstanceCommunication_pb2'
-  # @@protoc_insertion_point(class_scope:proto.FunctionStatusList)
-  })
-_sym_db.RegisterMessage(FunctionStatusList)
-
-MetricsData = _reflection.GeneratedProtocolMessageType('MetricsData', (_message.Message,), {
-
-  'UserMetricsEntry' : _reflection.GeneratedProtocolMessageType('UserMetricsEntry', (_message.Message,), {
-    'DESCRIPTOR' : _METRICSDATA_USERMETRICSENTRY,
-    '__module__' : 'InstanceCommunication_pb2'
-    # @@protoc_insertion_point(class_scope:proto.MetricsData.UserMetricsEntry)
-    })
-  ,
-  'DESCRIPTOR' : _METRICSDATA,
-  '__module__' : 'InstanceCommunication_pb2'
-  # @@protoc_insertion_point(class_scope:proto.MetricsData)
-  })
-_sym_db.RegisterMessage(MetricsData)
-_sym_db.RegisterMessage(MetricsData.UserMetricsEntry)
-
-HealthCheckResult = _reflection.GeneratedProtocolMessageType('HealthCheckResult', (_message.Message,), {
-  'DESCRIPTOR' : _HEALTHCHECKRESULT,
-  '__module__' : 'InstanceCommunication_pb2'
-  # @@protoc_insertion_point(class_scope:proto.HealthCheckResult)
-  })
-_sym_db.RegisterMessage(HealthCheckResult)
-
-Metrics = _reflection.GeneratedProtocolMessageType('Metrics', (_message.Message,), {
-
-  'InstanceMetrics' : _reflection.GeneratedProtocolMessageType('InstanceMetrics', (_message.Message,), {
-    'DESCRIPTOR' : _METRICS_INSTANCEMETRICS,
-    '__module__' : 'InstanceCommunication_pb2'
-    # @@protoc_insertion_point(class_scope:proto.Metrics.InstanceMetrics)
-    })
-  ,
-  'DESCRIPTOR' : _METRICS,
-  '__module__' : 'InstanceCommunication_pb2'
-  # @@protoc_insertion_point(class_scope:proto.Metrics)
-  })
-_sym_db.RegisterMessage(Metrics)
-_sym_db.RegisterMessage(Metrics.InstanceMetrics)
-
-
-DESCRIPTOR._options = None
-_METRICSDATA_USERMETRICSENTRY._options = None
-
-_INSTANCECONTROL = _descriptor.ServiceDescriptor(
-  name='InstanceControl',
-  full_name='proto.InstanceControl',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=1527,
-  serialized_end=1875,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='GetFunctionStatus',
-    full_name='proto.InstanceControl.GetFunctionStatus',
-    index=0,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_FUNCTIONSTATUS,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetAndResetMetrics',
-    full_name='proto.InstanceControl.GetAndResetMetrics',
-    index=1,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_METRICSDATA,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ResetMetrics',
-    full_name='proto.InstanceControl.ResetMetrics',
-    index=2,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetMetrics',
-    full_name='proto.InstanceControl.GetMetrics',
-    index=3,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_METRICSDATA,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='HealthCheck',
-    full_name='proto.InstanceControl.HealthCheck',
-    index=4,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_HEALTHCHECKRESULT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_INSTANCECONTROL)
-
-DESCRIPTOR.services_by_name['InstanceControl'] = _INSTANCECONTROL
-
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bInstanceCommunication.proto\x12\x05proto\x1a\x1bgoogle/protobuf/empty.proto\"\xc4\x05\n\x0e\x46unctionStatus\x12\x0f\n\x07running\x18\x01 \x01(\x08\x12\x18\n\x10\x66\x61ilureException\x18\x02 \x01(\t\x12\x13\n\x0bnumRestarts\x18\x03 \x01(\x03\x12\x13\n\x0bnumReceived\x18\x11 \x01(\x03\x12 \n\x18numSuccessfullyProcessed\x18\x05 \x01(\x03\x12\x19\n\x11numUserExceptions\x18\x06 \x01(\x03\x12H\n\x14latestUserExceptions\x18\x07 [...]
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'InstanceCommunication_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+  _globals['DESCRIPTOR']._loaded_options = None
+  _globals['DESCRIPTOR']._serialized_options = b'\n!org.apache.pulsar.functions.protoB\025InstanceCommunication'
+  _globals['_METRICSDATA_USERMETRICSENTRY']._loaded_options = None
+  _globals['_METRICSDATA_USERMETRICSENTRY']._serialized_options = b'8\001'
+  _globals['_FUNCTIONSTATUS']._serialized_start=68
+  _globals['_FUNCTIONSTATUS']._serialized_end=776
+  _globals['_FUNCTIONSTATUS_EXCEPTIONINFORMATION']._serialized_start=707
+  _globals['_FUNCTIONSTATUS_EXCEPTIONINFORMATION']._serialized_end=776
+  _globals['_FUNCTIONSTATUSLIST']._serialized_start=778
+  _globals['_FUNCTIONSTATUSLIST']._serialized_end=864
+  _globals['_METRICSDATA']._serialized_start=867
+  _globals['_METRICSDATA']._serialized_end=1331
+  _globals['_METRICSDATA_USERMETRICSENTRY']._serialized_start=1281
+  _globals['_METRICSDATA_USERMETRICSENTRY']._serialized_end=1331
+  _globals['_HEALTHCHECKRESULT']._serialized_start=1333
+  _globals['_HEALTHCHECKRESULT']._serialized_end=1369
+  _globals['_METRICS']._serialized_start=1372
+  _globals['_METRICS']._serialized_end=1524
+  _globals['_METRICS_INSTANCEMETRICS']._serialized_start=1432
+  _globals['_METRICS_INSTANCEMETRICS']._serialized_end=1524
+  _globals['_INSTANCECONTROL']._serialized_start=1527
+  _globals['_INSTANCECONTROL']._serialized_end=1875
 # @@protoc_insertion_point(module_scope)
diff --git a/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2_grpc.py b/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2_grpc.py
index e895f53dbfa..b6135f36e8b 100644
--- a/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2_grpc.py
+++ b/pulsar-functions/instance/src/main/python/InstanceCommunication_pb2_grpc.py
@@ -1,29 +1,14 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
 """Client and server classes corresponding to protobuf-defined services."""
 import grpc
+import warnings
 
 import InstanceCommunication_pb2 as InstanceCommunication__pb2
 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
+GRPC_GENERATED_VERSION = '1.73.1'
+GRPC_VERSION = grpc.__version__
+
 
 class InstanceControlStub(object):
     """Missing associated documentation comment in .proto file."""
@@ -38,27 +23,27 @@ class InstanceControlStub(object):
                 '/proto.InstanceControl/GetFunctionStatus',
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=InstanceCommunication__pb2.FunctionStatus.FromString,
-                )
+                _registered_method=True)
         self.GetAndResetMetrics = channel.unary_unary(
                 '/proto.InstanceControl/GetAndResetMetrics',
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=InstanceCommunication__pb2.MetricsData.FromString,
-                )
+                _registered_method=True)
         self.ResetMetrics = channel.unary_unary(
                 '/proto.InstanceControl/ResetMetrics',
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-                )
+                _registered_method=True)
         self.GetMetrics = channel.unary_unary(
                 '/proto.InstanceControl/GetMetrics',
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=InstanceCommunication__pb2.MetricsData.FromString,
-                )
+                _registered_method=True)
         self.HealthCheck = channel.unary_unary(
                 '/proto.InstanceControl/HealthCheck',
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=InstanceCommunication__pb2.HealthCheckResult.FromString,
-                )
+                _registered_method=True)
 
 
 class InstanceControlServicer(object):
@@ -126,6 +111,7 @@ def add_InstanceControlServicer_to_server(servicer, server):
     generic_handler = grpc.method_handlers_generic_handler(
             'proto.InstanceControl', rpc_method_handlers)
     server.add_generic_rpc_handlers((generic_handler,))
+    server.add_registered_method_handlers('proto.InstanceControl', rpc_method_handlers)
 
 
  # This class is part of an EXPERIMENTAL API.
@@ -143,11 +129,21 @@ class InstanceControl(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/proto.InstanceControl/GetFunctionStatus',
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/proto.InstanceControl/GetFunctionStatus',
             google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
             InstanceCommunication__pb2.FunctionStatus.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
 
     @staticmethod
     def GetAndResetMetrics(request,
@@ -160,11 +156,21 @@ class InstanceControl(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/proto.InstanceControl/GetAndResetMetrics',
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/proto.InstanceControl/GetAndResetMetrics',
             google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
             InstanceCommunication__pb2.MetricsData.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
 
     @staticmethod
     def ResetMetrics(request,
@@ -177,11 +183,21 @@ class InstanceControl(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/proto.InstanceControl/ResetMetrics',
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/proto.InstanceControl/ResetMetrics',
             google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
             google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
 
     @staticmethod
     def GetMetrics(request,
@@ -194,11 +210,21 @@ class InstanceControl(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/proto.InstanceControl/GetMetrics',
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/proto.InstanceControl/GetMetrics',
             google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
             InstanceCommunication__pb2.MetricsData.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
 
     @staticmethod
     def HealthCheck(request,
@@ -211,8 +237,18 @@ class InstanceControl(object):
             wait_for_ready=None,
             timeout=None,
             metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/proto.InstanceControl/HealthCheck',
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/proto.InstanceControl/HealthCheck',
             google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
             InstanceCommunication__pb2.HealthCheckResult.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
diff --git a/pulsar-functions/instance/src/main/python/README.md b/pulsar-functions/instance/src/main/python/README.md
new file mode 100644
index 00000000000..bbbe149afec
--- /dev/null
+++ b/pulsar-functions/instance/src/main/python/README.md
@@ -0,0 +1,40 @@
+# Pulsar Functions Python Runtime
+
+### Updating Protobuf and gRPC generated stubs
+
+When using generated Protobuf and gRPC stubs (`*_pb2.py`, `*_pb2_gprc.py`), the generated code should be 
+updated when the grpcio and protobuf Python packages are updated. This is due to the fact that generated 
+Protobuf and gRPC stubs are not necessarily compatible across different versions of these packages at runtime. 
+The compatibility policy of Protobuf is documented in 
+[Protobuf's "Cross-Version Runtime Guarantee"](https://protobuf.dev/support/cross-version-runtime-guarantee/),
+which states that cross-version runtime support isn't guaranteed. gRPC follows a similar policy.
+
+In Pulsar's [Docker image](../../../../../docker/pulsar/Dockerfile), the `grpcio` and `protobuf` packages are
+pinned to specific versions. Whenever these versions are updated, the `PYTHON_GRPCIO_VERSION` 
+in [src/update_python_protobuf_stubs.sh](../../../../../src/update_python_protobuf_stubs.sh) should also be updated
+and the generated stubs should be regenerated with this script to ensure compatibility.
+
+To update the generated stubs, run the following command in the project root directory:
+
+```bash
+# run this command from the project root directory
+src/update_python_protobuf_stubs.sh
+```
+
+Alternatively, you can run this command to install the required tools in a docker container and update the stubs:
+
+```bash
+# run this command from the project root directory
+src/update_python_protobuf_stubs_with_docker.sh
+```
+
+When the script is run, it will also print such information to the console:
+
+```
+libprotoc library included in grpcio-tools will be used:
+libprotoc 31.0
+The compatible matching protobuf package version in Python is prefixed with '6.'
+Ensure that you are using a compatible version of the protobuf package such as 6.31.0 (or a matching patch version).
+```
+
+When pinning the `protobuf` package in your Python project follow this guidance to ensure compatibility of the generated stubs with the `protobuf` package version.
\ No newline at end of file
diff --git a/src/update_python_protobuf_stubs.sh b/src/update_python_protobuf_stubs.sh
new file mode 100755
index 00000000000..45190c2cd2f
--- /dev/null
+++ b/src/update_python_protobuf_stubs.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# This script generates Python gRPC and Protobuf stubs from the .proto files
+# Set the version of PYTHON_GRPCIO_VERSION to the version which matches the version of grpcio in the Dockerfile
+PYTHON_GRPCIO_VERSION=${PYTHON_GRPCIO_VERSION:-"1.73.1"}
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
+
+# Create a temporary virtual environment to avoid polluting the global Python environment
+tempvenv=$(mktemp -d /tmp/pulsar-venv.XXXXXX)
+python3 -m venv $tempvenv
+source $tempvenv/bin/activate
+
+# install the required packages for protobuf and grpc
+echo "Installing grpc-tools $PYTHON_GRPCIO_VERSION..."
+python3 -m pip install grpcio-tools==$PYTHON_GRPCIO_VERSION
+
+echo "libprotoc library included in grpcio-tools will be used:"
+python3 -m grpc_tools.protoc --version
+echo "The compatible matching protobuf package version in Python is prefixed with '6.'"
+echo "Ensure that you are using a compatible version of the protobuf package such as 6.$(python3 -m grpc_tools.protoc --version | awk '{print $2}') (or a matching patch version)."
+
+cd $SCRIPT_DIR/..
+echo "Generating Python gRPC and Protobuf stubs from the .proto files..."
+
+# Generate Python gRPC and Protobuf stubs from the .proto files
+
+# Generate stubs for Function.proto and InstanceCommunication.proto, used for Pulsar Functions Python runtime
+python3 -m grpc_tools.protoc \
+    --proto_path=pulsar-functions/proto/src/main/proto \
+    --python_out=pulsar-functions/instance/src/main/python \
+    pulsar-functions/proto/src/main/proto/Function.proto
+
+# Remove the strict version checking in the generated file
+sed -i '/^_runtime_version\.ValidateProtobufRuntimeVersion($/,/^)$/d' \
+  pulsar-functions/instance/src/main/python/Function_pb2.py
+
+python3 -m grpc_tools.protoc \
+    --proto_path=pulsar-functions/proto/src/main/proto \
+    --python_out=pulsar-functions/instance/src/main/python \
+    --grpc_python_out=pulsar-functions/instance/src/main/python \
+    pulsar-functions/proto/src/main/proto/InstanceCommunication.proto
+
+# Remove the strict version checking in the generated file
+sed -i '/^_runtime_version\.ValidateProtobufRuntimeVersion($/,/^)$/d' \
+  pulsar-functions/instance/src/main/python/InstanceCommunication_pb2.py
+sed -i '/^_version_not_supported = False$/,/^    )$/d' \
+  pulsar-functions/instance/src/main/python/InstanceCommunication_pb2_grpc.py
+
+# Generate stubs for MLDataFormats.proto, used for managed-ledger python scripts
+python3 -m grpc_tools.protoc \
+    --proto_path=managed-ledger/src/main/proto \
+    --python_out=bin/proto \
+    managed-ledger/src/main/proto/MLDataFormats.proto
+
+# Remove the strict version checking in the generated file
+sed -i '/^_runtime_version\.ValidateProtobufRuntimeVersion($/,/^)$/d' \
+  bin/proto/MLDataFormats_pb2.py
+
+echo "Python gRPC and Protobuf stubs generated successfully."
+
+# Deactivate and remove the temporary virtual environment
+deactivate
+rm -rf $tempvenv
\ No newline at end of file
diff --git a/docker/pulsar/scripts/install-pulsar-client.sh b/src/update_python_protobuf_stubs_with_docker.sh
similarity index 66%
copy from docker/pulsar/scripts/install-pulsar-client.sh
copy to src/update_python_protobuf_stubs_with_docker.sh
index 0951b2aec1b..ece0b5096d7 100755
--- a/docker/pulsar/scripts/install-pulsar-client.sh
+++ b/src/update_python_protobuf_stubs_with_docker.sh
@@ -18,13 +18,8 @@
 # under the License.
 #
 
-set -x
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
 
-# TODO: remove these lines once grpcio doesn't need to compile from source on ARM64 platform
-ARCH=$(uname -m | sed -r 's/aarch64/arm64/g' |  awk '!/arm64/{$0="amd64"}1')
-if [ "${ARCH}" == "arm64" ]; then
-  apt update
-  apt -y install build-essential python3-dev
-fi
-
-pip3 install pulsar-client[all]==${PULSAR_CLIENT_PYTHON_VERSION}
+# Create an inline docker container with alpine:3.21 base image and mount the current directory to it as the
+# working directory and run the script inside the container.
+docker run --rm -v "$SCRIPT_DIR/..:/pulsar_src" -w /pulsar_src alpine:3.21 sh -c 'apk add --no-cache bash python3 && /pulsar_src/src/update_python_protobuf_stubs.sh'
\ No newline at end of file


(pulsar) 01/02: [fix][broker] Fix exclusive producer creation when last shared producer closes (#24516)

Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 102fdb3a09d883b2d3b41a2e83ebabcb53d995f1
Author: Ruimin MA <ma...@gmail.com>
AuthorDate: Wed Jul 23 17:48:30 2025 +0800

    [fix][broker] Fix exclusive producer creation when last shared producer closes (#24516)
    
    Co-authored-by: crossoverJie <cr...@gmail.com>
    (cherry picked from commit efe9dc87ed2ca2144689628cb67c19e10c3091f5)
---
 .../pulsar/broker/service/AbstractTopic.java       |  8 +++---
 .../broker/service/ExclusiveProducerTest.java      | 29 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
index dee15052a3d..f14201771b1 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
@@ -1078,9 +1078,11 @@ public abstract class AbstractTopic implements Topic, TopicPolicyListener<TopicP
     protected void handleProducerRemoved(Producer producer) {
         // decrement usage only if this was a valid producer close
         USAGE_COUNT_UPDATER.decrementAndGet(this);
-        // this conditional check is an optimization so we don't have acquire the write lock
-        // and execute following routine if there are no exclusive producers
-        if (hasExclusiveProducer) {
+        // this conditional check is an optimization so we only need to acquire the write lock
+        // and execute following routine when:
+        // 1. If there was an exclusive producer before.
+        // 2. If this was the last producer closed and there are waiting exclusive producers
+        if (hasExclusiveProducer || (producers.isEmpty() && !waitingExclusiveProducers.isEmpty())) {
             lock.writeLock().lock();
             try {
                 hasExclusiveProducer = false;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ExclusiveProducerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ExclusiveProducerTest.java
index 5f95e557b8c..13b1862a068 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ExclusiveProducerTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ExclusiveProducerTest.java
@@ -240,6 +240,35 @@ public class ExclusiveProducerTest extends BrokerTestBase {
         Awaitility.await().untilAsserted(() -> Assert.assertEquals(timer.pendingTimeouts(), 0));
     }
 
+    @Test(dataProvider = "topics")
+    public void testSharedProducerCloseWithWaitForExclusiveProducer(String type, boolean partitioned) throws Exception {
+        String topic = newTopic(type, partitioned);
+        Producer<String> p1 = pulsarClient.newProducer(Schema.STRING)
+                .topic(topic)
+                .accessMode(ProducerAccessMode.Shared)
+                .create();
+        Producer<String> p2 = pulsarClient.newProducer(Schema.STRING)
+                .topic(topic)
+                .accessMode(ProducerAccessMode.Shared)
+                .create();
+        CompletableFuture<Producer<String>> p3Future = pulsarClient.newProducer(Schema.STRING)
+                .topic(topic)
+                .accessMode(ProducerAccessMode.WaitForExclusive)
+                .createAsync();
+        // sleep 1 second to make sure p1, p2, p3Future are added to broker producers and waitingExclusiveProducers
+        Thread.sleep(1000L);
+        // now p3Future is still pending because p1,p2 are active in shared mode.
+        assertFalse(p3Future.isDone());
+        p1.close();
+        p2.close();
+        // close p1,p2 and p3Future should be done and return a producer.
+        Awaitility.await().atMost(3, TimeUnit.SECONDS).untilAsserted(() -> {
+            assertTrue(p3Future.isDone());
+            assertTrue(p3Future.get().isConnected());
+        });
+        p3Future.get().close();
+    }
+
     @Test(dataProvider = "topics")
     public void existingSharedProducer(String type, boolean partitioned) throws Exception {
         String topic = newTopic(type, partitioned);