This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch jmac/googlecas_and_virtual_directories_1 in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 470f357643f3b858323f79cc35b4253c34b0bb4a Author: Jürg Billeter <[email protected]> AuthorDate: Thu Mar 15 10:13:23 2018 +0100 Add proto for BuildStream artifact cache service --- .coveragerc | 3 + .pylintrc | 2 +- buildstream/buildstream.proto | 78 +++++++++ buildstream/buildstream_pb2.py | 325 ++++++++++++++++++++++++++++++++++++ buildstream/buildstream_pb2_grpc.py | 87 ++++++++++ doc/Makefile | 2 +- 6 files changed, 495 insertions(+), 2 deletions(-) diff --git a/.coveragerc b/.coveragerc index 6014b7f..739d1d0 100644 --- a/.coveragerc +++ b/.coveragerc @@ -6,6 +6,9 @@ include = omit = # Omit profiling helper module */buildstream/_profile.py + # Omit generated code + */buildstream/*_pb2.py + */buildstream/*_pb2_grpc.py */.eggs/* [report] diff --git a/.pylintrc b/.pylintrc index 7b53ecb..a70476a 100644 --- a/.pylintrc +++ b/.pylintrc @@ -190,7 +190,7 @@ ignored-classes=optparse.Values,thread._local,_thread._local,contextlib.closing, # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis. It # supports qualified module names, as well as Unix pattern matching. -ignored-modules=pkg_resources,gi.repository,grpc,google.* +ignored-modules=pkg_resources,gi.repository,grpc,google.*,buildstream.buildstream_pb2,buildstream.buildstream_pb2_grpc # Show a hint with possible names when a member name was not found. The aspect # of finding the hint is based on edit distance. diff --git a/buildstream/buildstream.proto b/buildstream/buildstream.proto new file mode 100644 index 0000000..3d2cb42 --- /dev/null +++ b/buildstream/buildstream.proto @@ -0,0 +1,78 @@ +syntax = "proto3"; + +package buildstream; + +import "google/api/annotations.proto"; +import "google/devtools/remoteexecution/v1test/remote_execution.proto"; + +service ArtifactCache { + // Retrieve a cached artifact. + // + // Errors: + // * `NOT_FOUND`: The requested `ActionResult` is not in the cache. + rpc GetArtifact(GetArtifactRequest) returns (GetArtifactResponse) { + option (google.api.http) = { get: "/v1test/{instance_name=**}/buildstream/artifacts/{key}" }; + } + + // Associate a cache key with a CAS build artifact. + // + // Errors: + // * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the + // entry to the cache. + rpc UpdateArtifact(UpdateArtifactRequest) returns (UpdateArtifactResponse) { + option (google.api.http) = { put: "/v1test/{instance_name=**}/buildstream/artifacts/{key}" body: "artifact" }; + } + + rpc Status(StatusRequest) returns (StatusResponse) { + option (google.api.http) = { put: "/v1test/{instance_name=**}/buildstream/artifacts:status" }; + } +} + +message GetArtifactRequest { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + string instance_name = 1; + + // The BuildStream cache key. + string key = 2; +} + +message GetArtifactResponse { + // The digest of the artifact [Directory][google.devtools.remoteexecution.v1test.Directory]. + google.devtools.remoteexecution.v1test.Digest artifact = 1; +} + +message UpdateArtifactRequest { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + string instance_name = 1; + + // The BuildStream cache key. + repeated string keys = 2; + + // The digest of the artifact [Directory][google.devtools.remoteexecution.v1test.Directory] + // to store in the cache. + google.devtools.remoteexecution.v1test.Digest artifact = 3; +} + +message UpdateArtifactResponse { +} + +message StatusRequest { + // The instance of the execution system to operate against. A server may + // support multiple instances of the execution system (with their own workers, + // storage, caches, etc.). The server MAY require use of this field to select + // between them in an implementation-defined fashion, otherwise it can be + // omitted. + string instance_name = 1; +} + +message StatusResponse { + bool allow_updates = 1; +} diff --git a/buildstream/buildstream_pb2.py b/buildstream/buildstream_pb2.py new file mode 100644 index 0000000..8f10201 --- /dev/null +++ b/buildstream/buildstream_pb2.py @@ -0,0 +1,325 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: buildstream/buildstream.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +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 symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2 +from google.devtools.remoteexecution.v1test import remote_execution_pb2 as google_dot_devtools_dot_remoteexecution_dot_v1test_dot_remote__execution__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='buildstream/buildstream.proto', + package='buildstream', + syntax='proto3', + serialized_pb=_b('\n\x1d\x62uildstream/buildstream.proto\x12\x0b\x62uildstream\x1a\x1cgoogle/api/annotations.proto\x1a=google/devtools/remoteexecution/v1test/remote_execution.proto\"8\n\x12GetArtifactRequest\x12\x15\n\rinstance_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\"W\n\x13GetArtifactResponse\x12@\n\x08\x61rtifact\x18\x01 \x01(\x0b\x32..google.devtools.remoteexecution.v1test.Digest\"~\n\x15UpdateArtifactRequest\x12\x15\n\rinstance_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\ [...] + , + dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,google_dot_devtools_dot_remoteexecution_dot_v1test_dot_remote__execution__pb2.DESCRIPTOR,]) + + + + +_GETARTIFACTREQUEST = _descriptor.Descriptor( + name='GetArtifactRequest', + full_name='buildstream.GetArtifactRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='instance_name', full_name='buildstream.GetArtifactRequest.instance_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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='key', full_name='buildstream.GetArtifactRequest.key', 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=139, + serialized_end=195, +) + + +_GETARTIFACTRESPONSE = _descriptor.Descriptor( + name='GetArtifactResponse', + full_name='buildstream.GetArtifactResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='artifact', full_name='buildstream.GetArtifactResponse.artifact', 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=197, + serialized_end=284, +) + + +_UPDATEARTIFACTREQUEST = _descriptor.Descriptor( + name='UpdateArtifactRequest', + full_name='buildstream.UpdateArtifactRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='instance_name', full_name='buildstream.UpdateArtifactRequest.instance_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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='keys', full_name='buildstream.UpdateArtifactRequest.keys', index=1, + number=2, 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, + options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='artifact', full_name='buildstream.UpdateArtifactRequest.artifact', 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=286, + serialized_end=412, +) + + +_UPDATEARTIFACTRESPONSE = _descriptor.Descriptor( + name='UpdateArtifactResponse', + full_name='buildstream.UpdateArtifactResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=414, + serialized_end=438, +) + + +_STATUSREQUEST = _descriptor.Descriptor( + name='StatusRequest', + full_name='buildstream.StatusRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='instance_name', full_name='buildstream.StatusRequest.instance_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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=440, + serialized_end=478, +) + + +_STATUSRESPONSE = _descriptor.Descriptor( + name='StatusResponse', + full_name='buildstream.StatusResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='allow_updates', full_name='buildstream.StatusResponse.allow_updates', 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, + options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=480, + serialized_end=519, +) + +_GETARTIFACTRESPONSE.fields_by_name['artifact'].message_type = google_dot_devtools_dot_remoteexecution_dot_v1test_dot_remote__execution__pb2._DIGEST +_UPDATEARTIFACTREQUEST.fields_by_name['artifact'].message_type = google_dot_devtools_dot_remoteexecution_dot_v1test_dot_remote__execution__pb2._DIGEST +DESCRIPTOR.message_types_by_name['GetArtifactRequest'] = _GETARTIFACTREQUEST +DESCRIPTOR.message_types_by_name['GetArtifactResponse'] = _GETARTIFACTRESPONSE +DESCRIPTOR.message_types_by_name['UpdateArtifactRequest'] = _UPDATEARTIFACTREQUEST +DESCRIPTOR.message_types_by_name['UpdateArtifactResponse'] = _UPDATEARTIFACTRESPONSE +DESCRIPTOR.message_types_by_name['StatusRequest'] = _STATUSREQUEST +DESCRIPTOR.message_types_by_name['StatusResponse'] = _STATUSRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +GetArtifactRequest = _reflection.GeneratedProtocolMessageType('GetArtifactRequest', (_message.Message,), dict( + DESCRIPTOR = _GETARTIFACTREQUEST, + __module__ = 'buildstream.buildstream_pb2' + # @@protoc_insertion_point(class_scope:buildstream.GetArtifactRequest) + )) +_sym_db.RegisterMessage(GetArtifactRequest) + +GetArtifactResponse = _reflection.GeneratedProtocolMessageType('GetArtifactResponse', (_message.Message,), dict( + DESCRIPTOR = _GETARTIFACTRESPONSE, + __module__ = 'buildstream.buildstream_pb2' + # @@protoc_insertion_point(class_scope:buildstream.GetArtifactResponse) + )) +_sym_db.RegisterMessage(GetArtifactResponse) + +UpdateArtifactRequest = _reflection.GeneratedProtocolMessageType('UpdateArtifactRequest', (_message.Message,), dict( + DESCRIPTOR = _UPDATEARTIFACTREQUEST, + __module__ = 'buildstream.buildstream_pb2' + # @@protoc_insertion_point(class_scope:buildstream.UpdateArtifactRequest) + )) +_sym_db.RegisterMessage(UpdateArtifactRequest) + +UpdateArtifactResponse = _reflection.GeneratedProtocolMessageType('UpdateArtifactResponse', (_message.Message,), dict( + DESCRIPTOR = _UPDATEARTIFACTRESPONSE, + __module__ = 'buildstream.buildstream_pb2' + # @@protoc_insertion_point(class_scope:buildstream.UpdateArtifactResponse) + )) +_sym_db.RegisterMessage(UpdateArtifactResponse) + +StatusRequest = _reflection.GeneratedProtocolMessageType('StatusRequest', (_message.Message,), dict( + DESCRIPTOR = _STATUSREQUEST, + __module__ = 'buildstream.buildstream_pb2' + # @@protoc_insertion_point(class_scope:buildstream.StatusRequest) + )) +_sym_db.RegisterMessage(StatusRequest) + +StatusResponse = _reflection.GeneratedProtocolMessageType('StatusResponse', (_message.Message,), dict( + DESCRIPTOR = _STATUSRESPONSE, + __module__ = 'buildstream.buildstream_pb2' + # @@protoc_insertion_point(class_scope:buildstream.StatusResponse) + )) +_sym_db.RegisterMessage(StatusResponse) + + + +_ARTIFACTCACHE = _descriptor.ServiceDescriptor( + name='ArtifactCache', + full_name='buildstream.ArtifactCache', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=522, + serialized_end=983, + methods=[ + _descriptor.MethodDescriptor( + name='GetArtifact', + full_name='buildstream.ArtifactCache.GetArtifact', + index=0, + containing_service=None, + input_type=_GETARTIFACTREQUEST, + output_type=_GETARTIFACTRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0028\0226/v1test/{instance_name=**}/buildstream/artifacts/{key}')), + ), + _descriptor.MethodDescriptor( + name='UpdateArtifact', + full_name='buildstream.ArtifactCache.UpdateArtifact', + index=1, + containing_service=None, + input_type=_UPDATEARTIFACTREQUEST, + output_type=_UPDATEARTIFACTRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\002B\0326/v1test/{instance_name=**}/buildstream/artifacts/{key}:\010artifact')), + ), + _descriptor.MethodDescriptor( + name='Status', + full_name='buildstream.ArtifactCache.Status', + index=2, + containing_service=None, + input_type=_STATUSREQUEST, + output_type=_STATUSRESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), _b('\202\323\344\223\0029\0327/v1test/{instance_name=**}/buildstream/artifacts:status')), + ), +]) +_sym_db.RegisterServiceDescriptor(_ARTIFACTCACHE) + +DESCRIPTOR.services_by_name['ArtifactCache'] = _ARTIFACTCACHE + +# @@protoc_insertion_point(module_scope) diff --git a/buildstream/buildstream_pb2_grpc.py b/buildstream/buildstream_pb2_grpc.py new file mode 100644 index 0000000..21d914a --- /dev/null +++ b/buildstream/buildstream_pb2_grpc.py @@ -0,0 +1,87 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +from buildstream import buildstream_pb2 as buildstream_dot_buildstream__pb2 + + +class ArtifactCacheStub(object): + # missing associated documentation comment in .proto file + pass + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetArtifact = channel.unary_unary( + '/buildstream.ArtifactCache/GetArtifact', + request_serializer=buildstream_dot_buildstream__pb2.GetArtifactRequest.SerializeToString, + response_deserializer=buildstream_dot_buildstream__pb2.GetArtifactResponse.FromString, + ) + self.UpdateArtifact = channel.unary_unary( + '/buildstream.ArtifactCache/UpdateArtifact', + request_serializer=buildstream_dot_buildstream__pb2.UpdateArtifactRequest.SerializeToString, + response_deserializer=buildstream_dot_buildstream__pb2.UpdateArtifactResponse.FromString, + ) + self.Status = channel.unary_unary( + '/buildstream.ArtifactCache/Status', + request_serializer=buildstream_dot_buildstream__pb2.StatusRequest.SerializeToString, + response_deserializer=buildstream_dot_buildstream__pb2.StatusResponse.FromString, + ) + + +class ArtifactCacheServicer(object): + # missing associated documentation comment in .proto file + pass + + def GetArtifact(self, request, context): + """Retrieve a cached artifact. + + Errors: + * `NOT_FOUND`: The requested `ActionResult` is not in the cache. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateArtifact(self, request, context): + """Associate a cache key with a CAS build artifact. + + Errors: + * `RESOURCE_EXHAUSTED`: There is insufficient storage space to add the + entry to the cache. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Status(self, request, context): + # missing associated documentation comment in .proto file + pass + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_ArtifactCacheServicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetArtifact': grpc.unary_unary_rpc_method_handler( + servicer.GetArtifact, + request_deserializer=buildstream_dot_buildstream__pb2.GetArtifactRequest.FromString, + response_serializer=buildstream_dot_buildstream__pb2.GetArtifactResponse.SerializeToString, + ), + 'UpdateArtifact': grpc.unary_unary_rpc_method_handler( + servicer.UpdateArtifact, + request_deserializer=buildstream_dot_buildstream__pb2.UpdateArtifactRequest.FromString, + response_serializer=buildstream_dot_buildstream__pb2.UpdateArtifactResponse.SerializeToString, + ), + 'Status': grpc.unary_unary_rpc_method_handler( + servicer.Status, + request_deserializer=buildstream_dot_buildstream__pb2.StatusRequest.FromString, + response_serializer=buildstream_dot_buildstream__pb2.StatusResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'buildstream.ArtifactCache', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/doc/Makefile b/doc/Makefile index c894a13..557dc55 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -65,7 +65,7 @@ all: html devhelp templates: mkdir -p source/elements mkdir -p source/sources - $(SPHINXAPIDOC) --force --separate --module-first --no-headings -o source $(CURDIR)/../buildstream + $(SPHINXAPIDOC) --force --separate --module-first --no-headings -o source $(CURDIR)/../buildstream $(CURDIR)/../buildstream/*_pb2*.py $(call plugin-doc-skeleton,$(CURDIR)/../buildstream/plugins/elements,elements) $(call plugin-doc-skeleton,$(CURDIR)/../buildstream/plugins/sources,sources)
