view release on metacpan or search on metacpan
lib/AC/Yenta/Client.pm view on Meta::CPAN
map => $map,
key => $key,
version => $ver,
shard => _shard($key), # NYI
value => $val,
meta => $meta,
} ]
}, $file );
return $me->_send_request($map, $req, $file);
# return undef | result
}
sub check {
my $me = shift;
my $map = shift;
my $ver = shift;
my $lev = shift;
my $req = $me->{proto}->encode_request( {
type => 'yenta_check',
lib/AC/Yenta/Client.pm view on Meta::CPAN
$req .= $$file if $file;
$me->{debug}->("trying to contact yenta server $addr:$port");
my $res;
eval {
$res = $me->{proto}->send_request($ipn, $port, $req, $me->{debug}, $me->{timeout});
$res->{data} = $me->{proto}->decode_reply( $res ) if $res;
};
if(my $e = $@){
$me->{debug}->("yenta request failed: $e");
$res = undef;
}
return $res;
}
################################################################
sub _next_host {
my $me = shift;
my $map = shift;
lib/AC/Yenta/Direct.pm view on Meta::CPAN
return unless $me;
return $me->get( $key );
}
sub new {
my $class = shift;
my $map = shift;
my $file = shift;
my $db = AC::Yenta::Store::Map->new( $map, undef, { dbfile => $file, readonly => 1 } );
return unless $db;
return bless { db => $db }, $class;
}
sub get {
my $me = shift;
my $key = shift;
my $db = $me->{db};
lib/AC/Yenta/Kibitz/Store/Client.pm view on Meta::CPAN
$me->SUPER::start();
$me->write( $me->{_req} );
$me->timeout_rel($TIMEOUT);
return $me;
}
sub shutdown {
my $me = shift;
# maybe call error handler
$me->run_callback('error', undef) unless $me->{_store_ok};
}
sub timeout {
my $me = shift;
$me->shut();
}
sub read {
my $me = shift;
lib/AC/Yenta/Kibitz/Store/Server.pm view on Meta::CPAN
map => $r->{map},
key => $r->{key},
};
if( $meta && $file ){
unless( _check_content( $meta, $file ) ){
problem("content SHA1 check failed: $r->{map}, $r->{key}, $ver - removing");
# QQQ - remove from system, (and let AE get a new copy)?
store_remove($r->{map}, $r->{key}, $ver);
# tell caller it was not found
$ver = undef;
}
}
if( defined $ver ){
$res->{version} = $ver;
$res->{value} = $data;
$res->{meta} = $meta if defined $meta;
if( $file ){
# if one file to send, send it as content
if( @{$req->{data}} == 1 ){
lib/AC/Yenta/Kibitz/Store/Server.pm view on Meta::CPAN
$res->{file} = $$file;
}
}
}
push @res, $res;
}
# encode results
my $ect = '';
my $yp = AC::Yenta::Protocol->new( secret => conf_value('secret') );
$ect = $proto->{data_encrypted} ? $yp->encrypt(undef, $$rescont) : $$rescont if $rescont;
my $response = $yp->encode_reply( {
type => 'yenta_get',
msgid => $proto->{msgid},
is_reply => 1,
data_encrypted => $proto->{data_encrypted},
content_encrypted => $proto->{data_encrypted},
}, { data => \@res }, \$ect );
debug("sending get reply");
$io->timeout_rel($TIMEOUT);
lib/AC/Yenta/Monitor.pm view on Meta::CPAN
my $old = shift;
my $ip;
$ip = $old->{ip} if ($old->{process_id} == $up->{process_id}) && ($old->{server_id} eq $up->{server_id});
unless( $ip ){
my $port = $up->{port};
unless( $port ){
# use monitored port (id is from config)
(undef, $port) = split /:/, $up->{id};
}
if( $up->{ip} ){
$ip = [ { ipv4 => $up->{ip}, port => $port, natdom => undef } ];
}else{
my $mynat = my_network_info();
for my $i ( @$mynat ){
push @$ip, { ipv4 => $i->{ipi}, port => $port, natdom => $i->{natdom} };
}
}
}
$up->{ip} = $ip;
lib/AC/Yenta/Protocol.pm view on Meta::CPAN
$data = $me->_decrypt_data( $io, $auth, $data );
return unless $data;
}
if( $p->{content_encrypted} && $content ){
$content = $me->_decrypt_data( $io, $auth, $content );
return unless $content;
}
# content is passed as reference
return ($p, $data, ($content ? \$content : undef));
}
# for simple status queries, argus, debugging
# this is not an RFC compliant http server
sub _read_http {
my $io = shift;
my $evt = shift;
return unless $io->{rbuffer} =~ /\r?\n\r?\n/s;
my($get, $url, $http) = split /\s+/, $io->{rbuffer};
lib/AC/Yenta/Stats.pm view on Meta::CPAN
my @peers = AC::Yenta::Status->allpeers();
$res .= sprintf("%-24s%s\n", "peers:", scalar @peers);
$res .= "\n";
return $res;
}
sub http_data {
my $url = shift;
my(undef, $map, $key, $ver) = split m|/|, $url;
my($data, $version, $file, $meta) = store_get($map, $key, $ver);
return http_notfound($url) unless $version;
return $data;
}
sub http_file {
my $url = shift;
my(undef, $map, $key, $ver) = split m|/|, $url;
my($data, $version, $file, $meta) = store_get($map, $key, $ver);
return http_notfound($url) unless $version && $file;
return $$file;
}
1;
lib/AC/Yenta/Status.pm view on Meta::CPAN
# then something local
@peer = @local unless @peer;
# last resort
@peer = @all unless @peer;
# sometimes use the seed, in case there was a network split
if( @peer && int(rand(@all+1)) ){
my $p = $peer[ rand(@peer) ];
debug("using peer $p->{server_id}");
return ($p->{server_id}, $p->{ip}, undef);
}
# seed peer
my $seed = conf_value('seedpeer');
my $p = $seed->[ rand(@$seed) ];
my ($ip, $port) = split /:/, $p;
$port ||= my_port();
# don't talk to self. any of my addrs.
my $ipinfo = my_network_info();
lib/AC/Yenta/Store/AE.pm view on Meta::CPAN
data_encrypted => $enc,
}, {
map => $me->{map},
level => $node->{level},
version => $node->{version},
shard => $node->{shard},
} );
# connect + send
my $io = AC::Yenta::Kibitz::Store::Client->new(
$me->{peer}{ip}, undef,
$request,
info => "AE node $node->{level}/$node->{version} with $me->{peer}{id}" );
if( $io ){
$io->set_callback('load', \&_check_load, $me);
$io->set_callback('error', \&_check_error, $me);
$io->start();
}
}
lib/AC/Yenta/Store/AE.pm view on Meta::CPAN
type => 'yenta_get',
msgidno => $msgid++,
want_reply => 1,
data_encrypted => $enc,
}, {
data => $get,
} );
# connect + send
debug("sending to $peer->{id}");
my $io = AC::Yenta::Kibitz::Store::Client->new($peer->{ip}, undef, $request,
info => "AE getkv from $peer->{id}" );
if( $io ){
$me->{kvfetching} ++;
$io->set_callback('load', \&_getkv_load, $me, $retry, $get);
$io->set_callback('error', \&_getkv_error, $me, $retry, $get);
$io->start();
}
}
lib/AC/Yenta/Store/BDBI.pm view on Meta::CPAN
my $me = shift;
$me->{db}->db_sync();
}
sub range {
my $me = shift;
my $map = shift;
my $sub = shift;
my $key = shift;
my $end = shift; # undef => to end of map
my ($k, $v, @k);
$me->_start();
my $cursor = $me->{db}->db_cursor();
$k = _key($map,$sub,$key);
my $e = _key($map,$sub,$end);
$cursor->c_get($k, $v, DB_SET_RANGE);
my $MAX = 100;
my $max = $MAX;
lib/AC/Yenta/Store/Distrib.pm view on Meta::CPAN
my $me = shift;
my $id = shift;
my $far = shift;
my $pd = AC::Yenta::Status->peer($id);
my $addr = $pd->{ip}; # array of nat ip info
my $enc = use_encryption($pd);
my $ect = '';
my $proto = AC::Yenta::Protocol->new( secret => conf_value('secret') );
$ect = $enc ? $proto->encrypt(undef, ${$me->{content}}) : ${$me->{content}} if $me->{content};
# build request
my $request = $proto->encode_request( {
type => 'yenta_distrib',
msgidno => $msgid++,
want_reply => 1,
data_encrypted => $enc,
content_encrypted => $enc,
}, {
sender => AC::Yenta::Status->my_server_id(),
hop => $me->{req}{hop} + 1,
expire => $me->{req}{expire},
datum => $me->{req}{datum},
}, \$ect );
# connect + send
my $io = AC::Yenta::Kibitz::Store::Client->new($addr, undef,
$request . $ect,
info => "distrib $me->{info} to $id",
);
if( $io ){
$io->set_callback('load', \&_onload, $me, $id, $far);
$io->set_callback('error', \&_onerror, $me, $id, $far);
$io->start();
}else{
debug("start client failed");
lib/AC/Yenta/Store/File.pm view on Meta::CPAN
my $base = $cf->{basedir};
return unless $base;
my $filename = "$base/$name";
my $f;
unless( open($f, $filename) ){
problem("cannot open file '$filename': $!");
return;
}
local $/ = undef;
my $content = <$f>;
return \$content;
}
sub put {
my $me = shift;
my $name = shift;
my $cont = shift; # reference
# validate filename
lib/AC/Yenta/Store/File.pm view on Meta::CPAN
my $cf = $me->{conf};
my $base = $cf->{basedir};
return 1 unless $base;
# split name into dir / file
my($dir, $file) = $name =~ m|(.*)/([^/]+)$|;
# create directory
debug("mkpath: $base/$dir");
my $mask = umask 0;
eval { mkpath("$base/$dir", undef, 0777); };
umask $mask;
# save file
my $f;
unless( open($f, "> $base/$name.tmp") ){
problem("cannot save file '$base/$name.tmp': $!");
return;
}
debug("saving file '$base/$name'");
lib/AC/Yenta/Store/LevelDB.pm view on Meta::CPAN
sub sync {
my $me = shift;
}
sub range {
my $me = shift;
my $map = shift;
my $sub = shift;
my $key = shift;
my $end = shift; # undef => to end of map
my $it = $me->{db}->NewIterator();
my @k;
my $e = _key($map,$sub,$end);
my $k = _key($map,$sub,$key);
my $r = $it->Seek($k);
lib/AC/Yenta/Store/Map.pm view on Meta::CPAN
my($data, $founddat) = $db->get($me->{name}, 'data', $vk);
if( wantarray ){
if( $founddat ){
my $meta = $db->get($me->{name}, 'meta', $vk);
my $file = $me->{fs}->get($data) if $data;
return( $data, $extver, $file, $meta );
}else{
# we don't have data, but we have it in history; fake it.
return (undef, $extver, undef, undef);
}
}
return $data;
}
# someone sent me something, do I want it?
sub want {
my $me = shift;
my $shard = shift;
lib/AC/Yenta/Store/Map.pm view on Meta::CPAN
return 1;
}
sub remove {
my $me = shift;
my $key = shift;
my $ver = shift;
my $shard = $me->_remove( $key, $ver );
$me->merkle( undef, { shard => decode_shard($shard), key => $key, version => $ver } );
$me->{db}->sync();
return 1;
}
# NB: does not update merkle tree
sub _remove {
my $me = shift;
my $key = shift;
my $ver = shift;
lib/AC/Yenta/Store/Map.pm view on Meta::CPAN
@walk = @next;
}
# remove k/v
for my $r (@delete){
debug("expiring $r->{key}/$r->{version}");
$me->_remove( $r->{key}, $r->{version} );
}
# update merkle
$me->merkle(undef, @delete);
$db->sync();
}
################################################################
sub vkey {
my $me = shift;
my $k = shift;
my $v = shift;
lib/AC/Yenta/Store/Merkle.pm view on Meta::CPAN
my $lev = shift;
my $ver = shift;
my $hash = shift;
my $count = shift;
my $db = $me->{db};
my $k0 = $me->_mkey($shard, $ver, $lev);
my $k1 = $me->_mkey($shard, $ver, $lev - 1);
my(undef, $nextshard, $nextver) = $me->_decode_mkey($k1);
unless( $lev ){
# root hash - not used
debug("updating merkle node root => $hash");
$me->_mcput( 'root', $hash );
return;
}
# get node
my $d = $me->_mcget( $k1 );
lib/AC/Yenta/Store/Merkle.pm view on Meta::CPAN
if( keys %d ){
$d = join("\0", map {"$_\0$d{$_}"} (sort keys %d));
$me->_mcput( $k1, $d );
my $newh = sha1_base64($d);
return if $newh eq $oldh; # unchanged
return ($nextshard, $nextver, $newh, scalar keys %d);
}else{
$me->_mcdel( $k1 );
return unless $oldh; # unchanged
return ($nextshard, $nextver, undef);
}
}
# leaf nodes:
# list of all "ver/key"
# \0 delimited. sorted by "ver/key"
# add new <key,version> to merkle leaf
sub _merkle_leaf_add {
my $me = shift;
lib/AC/Yenta/Store/Merkle.pm view on Meta::CPAN
my $vk = $me->_lkey($key, $ver, $shard);
debug("adding to merkle leaf $mk - $vk");
# get current data
my $d = $me->_mcget( $mk );
my @d = split /\0/, $d;
# append new item + uniqify
my %d;
@d{@d} = ();
$d{$vk} = undef;
$d = join("\0", sort keys %d);
$me->_mcput( $mk, $d );
my $hash = sha1_base64($d);
return ($shard, $ver, $hash, scalar keys %d);
}
# remove <key,version> from merkle leaf
sub _merkle_leaf_del {
my $me = shift;
lib/AC/Yenta/Store/Merkle.pm view on Meta::CPAN
if( @d ){
$d = join("\0", @d);
$me->_mcput( $mk, $d );
my $hash = sha1_base64($d);
return ($shard, $ver, $hash, scalar @d);
}else{
$me->_mcdel( $mk );
# empty node => empty hash
return ($shard, $ver, undef);
}
}
################################################################
sub _get_actual_keys {
my $me = shift;
my $shard = shift;
my $ver = shift;
lib/AC/Yenta/Store/Merkle.pm view on Meta::CPAN
sprintf '%02X/%s', $lev, $me->_ver_lev($ver, $lev);
}
sub _decode_mkey {
my $me = shift;
my $mk = shift;
# 10/000484D6594DB72B
my($l,$sv) = split m|/|, $mk, 2;
# level, shard, version
return ($l, undef, $sv);
}
sub _lkey {
my $me = shift;
my $k = shift;
my $v = shift;
my $s = shift;
# 000484D6594DB72B/foobar
return "$v/$k";
}
sub _decode_lkey {
my $me = shift;
my $lk = shift;
# 000484D6594DB72B/foobar
my($sv, $k) = split m|/|, $lk, 2;
# shard, version, key
return (undef, $sv, $k);
}
sub _ver_lev {
my $me = shift;
my $ver = shift;
my $lev = shift;
return substr($ver, 0, $lev) . ('0' x ($me->{merkle_height} - $lev));
}
lib/AC/Yenta/Store/Merkle.pm view on Meta::CPAN
return x64_number_to_hex($v);
}
sub decode_version {
my $v = shift;
return x64_hex_to_number($v);
}
sub encode_shard {
my $v = shift;
return undef unless defined $v;
return x64_number_to_hex($v);
}
sub decode_shard {
my $v = shift;
return undef unless defined $v;
return x64_hex_to_number($v);
}
sub _version_max_bitmask {
return x64_sixty_four_ones();
}
# numeric version + level => numeric version
sub normalize_version {
my $me = shift;
my $shard = shift;
my $ver = shift;
my $lev = shift;
my $n = ($me->{merkle_height} - $lev) * 4;
my $nv = ($ver >> $n) << $n;
return (undef, $nv);
}
sub version_max {
my $me = shift;
my $ver = shift;
my $lev = shift;
my $bm = _version_max_bitmask() >> ($lev * 4);
return $ver | $bm;
}
lib/AC/Yenta/Store/SQLite.pm view on Meta::CPAN
return 1;
}
sub sync {}
sub range {
my $me = shift;
my $map = shift;
my $sub = shift;
my $key = shift;
my $end = shift; # undef => to end of map
my $st;
if( defined $end ){
$st = _do($me->{db}, 'select key as k, value as v from ykv where map = ? and sub = ? and key >= ? and key < ?',
$map, $sub, $key, $end);
}else{
$st = _do($me->{db}, 'select key as k, value as v from ykv where map = ? and sub = ? and key >= ?',
$map, $sub, $key);
}
lib/AC/Yenta/Store/Tokyo.pm view on Meta::CPAN
my $me = shift;
$me->{db}->sync();
}
sub range {
my $me = shift;
my $map = shift;
my $sub = shift;
my $key = shift;
my $end = shift; # undef => to end of map
my $cur = TokyoCabinet::BDBCUR->new($me->{db});
my @k;
my $e = _key($map,$sub,$end);
my $k = _key($map,$sub,$key);
my $r = $cur->jump($k);
lib/AC/protobuf/auth.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPAuth->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPAuth',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'algorithm', 1, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPEncrypt->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPEncrypt',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'algorithm', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_FIXED64(),
'seqno', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'nonce', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'hmac', 4, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'length', 5, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_BYTES(),
'ciphertext', 50, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;
lib/AC/protobuf/heartbeat.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPHeartBeat->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPHeartBeat',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'status_code', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'status_message', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_FIXED32(),
'ipv4', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'port', 4, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_FIXED64(),
'timestamp', 5, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'subsystem', 6, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'environment', 7, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'sort_metric', 8, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'hostname', 9, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'server_id', 10, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'process_id', 11, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'capacity_metric', 12, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;
lib/AC/protobuf/std_ipport.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPIPPort->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPIPPort',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_FIXED32(),
'ipv4', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'port', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'natdom', 3, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;
lib/AC/protobuf/std_reply.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPStdReply->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPStdReply',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'status_code', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'status_message', 2, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;
lib/AC/protobuf/yenta_check.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPYentaCheckValue->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaCheckValue',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'map', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'version', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'level', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'key', 4, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'hash', 5, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'shard', 6, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaCheckReply->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaCheckReply',
[
[
Google::ProtocolBuffers::Constants::LABEL_REPEATED(),
'ACPYentaCheckValue',
'check', 1, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaCheckRequest->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaCheckRequest',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'map', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'level', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'version', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'shard', 4, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;
lib/AC/protobuf/yenta_getset.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPYentaMapDatum->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaMapDatum',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'map', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'key', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'version', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_BYTES(),
'value', 4, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_BYTES(),
'meta', 5, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_BYTES(),
'file', 6, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'shard', 7, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaDistRequest->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaDistRequest',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'hop', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'expire', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'sender', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
'ACPYentaMapDatum',
'datum', 4, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaGetSet->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaGetSet',
[
[
Google::ProtocolBuffers::Constants::LABEL_REPEATED(),
'ACPYentaMapDatum',
'data', 1, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaDistReply->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaDistReply',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'status_code', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'status_message', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_BOOL(),
'haveit', 3, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;
lib/AC/protobuf/yenta_status.pl view on Meta::CPAN
use warnings;
use Google::ProtocolBuffers;
{
unless (ACPYentaStatusReply->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaStatusReply',
[
[
Google::ProtocolBuffers::Constants::LABEL_REPEATED(),
'ACPYentaStatus',
'status', 1, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaStatus->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaStatus',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'hostname', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'datacenter', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'subsystem', 3, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'environment', 4, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'via', 5, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REPEATED(),
'ACPIPPort',
'ip', 6, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'status', 7, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'timestamp', 8, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_INT64(),
'lastup', 9, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REPEATED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'map', 10, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_BOOL(),
'uptodate', 11, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'sort_metric', 12, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'server_id', 13, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'instance_id', 14, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'path', 15, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'capacity_metric', 16, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPYentaStatusRequest->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPYentaStatusRequest',
[
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
'ACPYentaStatus',
'myself', 1, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
unless (ACPIPPort->can('_pb_fields_list')) {
Google::ProtocolBuffers->create_message(
'ACPIPPort',
[
[
Google::ProtocolBuffers::Constants::LABEL_REQUIRED(),
Google::ProtocolBuffers::Constants::TYPE_FIXED32(),
'ipv4', 1, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_INT32(),
'port', 2, undef
],
[
Google::ProtocolBuffers::Constants::LABEL_OPTIONAL(),
Google::ProtocolBuffers::Constants::TYPE_STRING(),
'natdom', 3, undef
],
],
{ 'create_accessors' => 1, 'follow_best_practice' => 1, }
);
}
}
1;