[LON-CAPA-cvs] cvs: loncom(store_expirement) / lond
albertel
lon-capa-cvs@mail.lon-capa.org
Sat, 04 Mar 2006 04:27:39 -0000
albertel Fri Mar 3 23:27:39 2006 EDT
Modified files: (Branch: store_expirement)
/loncom lond
Log:
- adding put store to expiremental branch, with support for compressed stores
Index: loncom/lond
diff -u loncom/lond:1.318.2.5 loncom/lond:1.318.2.6
--- loncom/lond:1.318.2.5 Fri Mar 3 17:03:17 2006
+++ loncom/lond Fri Mar 3 23:27:38 2006
@@ -2,7 +2,7 @@
# The LearningOnline Network
# lond "LON Daemon" Server (port "LOND" 5663)
#
-# $Id: lond,v 1.318.2.5 2006/03/03 22:03:17 albertel Exp $
+# $Id: lond,v 1.318.2.6 2006/03/04 04:27:38 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -61,7 +61,7 @@
my $lastlog='';
my $lond_max_wait_time = 13;
-my $VERSION='$Revision: 1.318.2.5 $'; #' stupid emacs
+my $VERSION='$Revision: 1.318.2.6 $'; #' stupid emacs
my $remoteVERSION;
my $currenthostid="default";
my $currentdomainid;
@@ -3102,6 +3102,75 @@
}
®ister_handler("store", \&store_handler, 0, 1, 0);
+sub putstore_handler {
+ my ($cmd, $tail, $client) = @_;
+
+ my $userinput = "$cmd:$tail";
+
+ my ($udom,$uname,$namespace,$rid,$v,$what) =split(/:/,$tail);
+ if ($namespace ne 'roles') {
+
+ chomp($what);
+ my $hashref = &tie_user_hash($udom, $uname, $namespace,
+ &GDBM_WRCREAT(), "C",
+ "$rid:$what");
+ if ($hashref) {
+ my $now = time;
+ my %data = &hash_extract($what);
+ my @allkeys;
+ if (exists($hashref->{"$v:compressed:$rid"})) {
+ my %current = &hash_extract($hashref->{"$v:compressed:$rid"});
+ while (my($key,$value) = each(%data)) {
+ push(@allkeys,$key);
+ $current{$key} = $value;
+ }
+ $hashref->{"$v:compressed:$rid"}= &hash_to_str(\%current);
+ } else {
+ while (my($key,$value) = each(%data)) {
+ push(@allkeys,$key);
+ $hashref->{"$v:$rid:$key"} = $value;
+ }
+ }
+ my $allkeys = join(':',@allkeys);
+ $hashref->{"$v:keys:$rid"}=$allkeys;
+
+ if (&untie_user_hash($hashref)) {
+ &Reply($client, "ok\n", $userinput);
+ } else {
+ &Failure($client, "error: ".($!+0)." untie(GDBM) Failed ".
+ "while attempting store\n", $userinput);
+ }
+ } else {
+ &Failure( $client, "error: ".($!+0)." tie(GDBM) Failed ".
+ "while attempting store\n", $userinput);
+ }
+ } else {
+ &Failure($client, "refused\n", $userinput);
+ }
+
+ return 1;
+}
+®ister_handler("putstore", \&putstore_handler, 0, 1, 0);
+
+sub hash_extract {
+ my ($str)=@_;
+ my %hash;
+ foreach my $pair (split(/\&/,$str)) {
+ my ($key,$value)=split(/=/,$pair);
+ $hash{$key}=$value;
+ }
+ return (%hash);
+}
+sub hash_to_str {
+ my ($hash_ref)=@_;
+ my $str;
+ foreach my $key (keys(%$hash_ref)) {
+ $str.=$key.'='.$hash_ref->{$key}.'&';
+ }
+ $str=~s/\&$//;
+ return $str;
+}
+
#
# Dump out all versions of a resource that has key=value pairs associated
# with it for each version. These resources are built up via the store