bdb 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'bdb/database'
3
+ require 'fileutils'
4
+
5
+ role = ARGV.shift || 'client'
6
+
7
+ MASTER = 'localhost:8888'
8
+ CLIENT = 'localhost:9999'
9
+
10
+ DIR = "/tmp/#{role}"
11
+ FileUtils.rmtree DIR
12
+ FileUtils.mkdir DIR
13
+
14
+ puts "Starting #{role}..."
15
+
16
+ Bdb::Environment.replicate DIR, :from => MASTER, :to => CLIENT, :host => role == 'master' ? MASTER : CLIENT
17
+ db = Bdb::Database.new('foo', :path => DIR)
18
+
19
+ loop do
20
+ 100.times do |i|
21
+ if role == 'master'
22
+ db.set(i, db[i].to_i + 1)
23
+ puts "#{i}: #{db[i]}"
24
+ else
25
+ puts "#{i}: #{db[i]}"
26
+ end
27
+ sleep 0.1
28
+ end
29
+ end
@@ -0,0 +1,157 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ #### Start of system configuration section. ####
5
+
6
+ srcdir = .
7
+ topdir = /opt/local/lib/ruby/1.8/i686-darwin10
8
+ hdrdir = $(topdir)
9
+ VPATH = $(srcdir):$(topdir):$(hdrdir)
10
+ exec_prefix = $(prefix)
11
+ prefix = $(DESTDIR)/opt/local
12
+ sharedstatedir = $(prefix)/com
13
+ mandir = $(DESTDIR)/opt/local/share/man
14
+ psdir = $(docdir)
15
+ oldincludedir = $(DESTDIR)/usr/include
16
+ localedir = $(datarootdir)/locale
17
+ bindir = $(exec_prefix)/bin
18
+ libexecdir = $(exec_prefix)/libexec
19
+ sitedir = $(libdir)/ruby/site_ruby
20
+ htmldir = $(docdir)
21
+ vendorarchdir = $(vendorlibdir)/$(sitearch)
22
+ includedir = $(prefix)/include
23
+ infodir = $(datarootdir)/info
24
+ vendorlibdir = $(vendordir)/$(ruby_version)
25
+ sysconfdir = $(prefix)/etc
26
+ libdir = $(exec_prefix)/lib
27
+ sbindir = $(exec_prefix)/sbin
28
+ rubylibdir = $(libdir)/ruby/$(ruby_version)
29
+ docdir = $(datarootdir)/doc/$(PACKAGE)
30
+ dvidir = $(docdir)
31
+ vendordir = $(DESTDIR)/opt/local/lib/ruby/vendor_ruby
32
+ datarootdir = $(prefix)/share
33
+ pdfdir = $(docdir)
34
+ archdir = $(rubylibdir)/$(arch)
35
+ sitearchdir = $(sitelibdir)/$(sitearch)
36
+ datadir = $(datarootdir)
37
+ localstatedir = $(prefix)/var
38
+ sitelibdir = $(sitedir)/$(ruby_version)
39
+
40
+ CC = /usr/bin/gcc-4.2
41
+ LIBRUBY = $(LIBRUBY_SO)
42
+ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
43
+ LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
44
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
45
+
46
+ RUBY_EXTCONF_H =
47
+ CFLAGS = -fno-common -O2 -arch x86_64 -fno-common -pipe -fno-common $(cflags) -arch x86_64
48
+ INCFLAGS = -I. -I. -I/opt/local/lib/ruby/1.8/i686-darwin10 -I.
49
+ DEFS =
50
+ CPPFLAGS = -I/usr/local/BerkeleyDB.4.8/include -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/opt/local/include
51
+ CXXFLAGS = $(CFLAGS)
52
+ ldflags = -L. -L/opt/local/lib
53
+ dldflags =
54
+ archflag = -arch x86_64
55
+ DLDFLAGS = $(ldflags) $(dldflags) $(archflag)
56
+ LDSHARED = $(CC) -dynamic -bundle -undefined suppress -flat_namespace
57
+ AR = ar
58
+ EXEEXT =
59
+
60
+ RUBY_INSTALL_NAME = ruby
61
+ RUBY_SO_NAME = ruby
62
+ arch = i686-darwin10
63
+ sitearch = i686-darwin10
64
+ ruby_version = 1.8
65
+ ruby = /opt/local/bin/ruby
66
+ RUBY = $(ruby)
67
+ RM = rm -f
68
+ MAKEDIRS = mkdir -p
69
+ INSTALL = /usr/bin/install -c
70
+ INSTALL_PROG = $(INSTALL) -m 0755
71
+ INSTALL_DATA = $(INSTALL) -m 644
72
+ COPY = cp
73
+
74
+ #### End of system configuration section. ####
75
+
76
+ preload =
77
+
78
+ libpath = . $(libdir) /usr/local/BerkeleyDB.4.8/lib
79
+ LIBPATH = -L. -L$(libdir) -L/usr/local/BerkeleyDB.4.8/lib
80
+ DEFFILE =
81
+
82
+ CLEANFILES = mkmf.log
83
+ DISTCLEANFILES =
84
+
85
+ extout =
86
+ extout_prefix =
87
+ target_prefix =
88
+ LOCAL_LIBS =
89
+ LIBS = $(LIBRUBYARG_SHARED) -ldb-4.8 -lpthread -ldl -lobjc
90
+ SRCS = bdb.c
91
+ OBJS = bdb.o
92
+ TARGET = bdb
93
+ DLLIB = $(TARGET).bundle
94
+ EXTSTATIC =
95
+ STATIC_LIB =
96
+
97
+ BINDIR = $(bindir)
98
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
99
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
100
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
101
+
102
+ TARGET_SO = $(DLLIB)
103
+ CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
104
+ CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
105
+
106
+ all: $(DLLIB)
107
+ static: $(STATIC_LIB)
108
+
109
+ clean:
110
+ @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
111
+
112
+ distclean: clean
113
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
114
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
115
+
116
+ realclean: distclean
117
+ install: install-so install-rb
118
+
119
+ install-so: $(RUBYARCHDIR)
120
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
121
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
122
+ $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
123
+ install-rb: pre-install-rb install-rb-default
124
+ install-rb-default: pre-install-rb-default
125
+ pre-install-rb: Makefile
126
+ pre-install-rb-default: Makefile
127
+ $(RUBYARCHDIR):
128
+ $(MAKEDIRS) $@
129
+
130
+ site-install: site-install-so site-install-rb
131
+ site-install-so: install-so
132
+ site-install-rb: install-rb
133
+
134
+ .SUFFIXES: .c .m .cc .cxx .cpp .C .o
135
+
136
+ .cc.o:
137
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
138
+
139
+ .cxx.o:
140
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
141
+
142
+ .cpp.o:
143
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
144
+
145
+ .C.o:
146
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
147
+
148
+ .c.o:
149
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
150
+
151
+ $(DLLIB): $(OBJS) Makefile
152
+ @-$(RM) $@
153
+ $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
154
+
155
+
156
+
157
+ $(OBJS): ruby.h defines.h
Binary file
data/ext/bdb.c CHANGED
@@ -267,9 +267,9 @@ VALUE db_open(VALUE obj, VALUE vtxn, VALUE vdisk_file,
267
267
 
268
268
  dbh->db->app_private=dbh;
269
269
  rv = dbh->db->open(dbh->db,txn?txn->txn:NULL,
270
- StringValueCStr(vdisk_file),
271
- logical_db,
272
- dbtype,flags,mode);
270
+ StringValueCStr(vdisk_file),
271
+ logical_db,
272
+ dbtype,flags,mode);
273
273
  if (rv != 0) {
274
274
  raise_error(rv,"db_open failure: %s(%d)",db_strerror(rv),rv);
275
275
  }
@@ -1637,6 +1637,8 @@ VALUE env_open(VALUE obj, VALUE vhome, VALUE vflags, VALUE vmode)
1637
1637
  raise_error(0,"env handle already used and closed");
1638
1638
 
1639
1639
  rv = eh->env->open(eh->env,StringValueCStr(vhome),flags,mode);
1640
+ eh->env->app_private=eh;
1641
+
1640
1642
  if (rv != 0) {
1641
1643
  raise_error(rv, "env_open failure: %s",db_strerror(rv));
1642
1644
  }
@@ -2749,6 +2751,205 @@ VALUE env_get_home(VALUE obj)
2749
2751
  return rb_str_new2(home);
2750
2752
  }
2751
2753
 
2754
+ /*
2755
+ * call-seq:
2756
+ * env.set_verbose(which, onoff)
2757
+ *
2758
+ * set verbose messages on or off
2759
+ */
2760
+ VALUE env_set_verbose(VALUE obj, VALUE which, VALUE onoff)
2761
+ {
2762
+ t_envh *eh;
2763
+ int rv;
2764
+
2765
+ Data_Get_Struct(obj,t_envh,eh);
2766
+ rv = eh->env->set_verbose(eh->env, NUM2UINT(which), RTEST(onoff));
2767
+
2768
+ if ( rv != 0 ) raise_error(rv, "env_set_verbose: %s",db_strerror(rv));
2769
+
2770
+ return Qtrue;
2771
+ }
2772
+
2773
+ /*
2774
+ * call-seq:
2775
+ * env.rep_priority = int
2776
+ *
2777
+ * specify how the replication manager will handle acknowledgement of replication messages
2778
+ */
2779
+ VALUE env_rep_set_priority(VALUE obj, VALUE priority)
2780
+ {
2781
+ t_envh *eh;
2782
+ int rv;
2783
+
2784
+ Data_Get_Struct(obj,t_envh,eh);
2785
+ rv = eh->env->rep_set_priority(eh->env, NUM2UINT(priority));
2786
+
2787
+ if ( rv != 0 ) raise_error(rv, "env_rep_set_priority: %s", db_strerror(rv));
2788
+ return priority;
2789
+ }
2790
+
2791
+ /*
2792
+ * call-seq:
2793
+ * env.rep_priority -> int
2794
+ *
2795
+ * returns the replication manager's acknowledgement policy
2796
+ */
2797
+ VALUE env_rep_get_priority(VALUE obj)
2798
+ {
2799
+ t_envh *eh;
2800
+ u_int32_t priority;
2801
+
2802
+ Data_Get_Struct(obj,t_envh,eh);
2803
+ eh->env->rep_get_priority(eh->env, &priority);
2804
+
2805
+ return INT2NUM(priority);
2806
+ }
2807
+
2808
+ /*
2809
+ * call-seq:
2810
+ * env.rep_nsites = int
2811
+ *
2812
+ * specify how the replication manager will handle acknowledgement of replication messages
2813
+ */
2814
+ VALUE env_rep_set_nsites(VALUE obj, VALUE nsites)
2815
+ {
2816
+ t_envh *eh;
2817
+ int rv;
2818
+
2819
+ Data_Get_Struct(obj,t_envh,eh);
2820
+ rv = eh->env->rep_set_nsites(eh->env, NUM2UINT(nsites));
2821
+
2822
+ if ( rv != 0 ) raise_error(rv, "env_rep_set_nsites: %s", db_strerror(rv));
2823
+ return nsites;
2824
+ }
2825
+
2826
+ /*
2827
+ * call-seq:
2828
+ * env.rep_nsites -> int
2829
+ *
2830
+ * returns the replication manager's acknowledgement policy
2831
+ */
2832
+ VALUE env_rep_get_nsites(VALUE obj)
2833
+ {
2834
+ t_envh *eh;
2835
+ u_int32_t nsites;
2836
+
2837
+ Data_Get_Struct(obj,t_envh,eh);
2838
+ eh->env->rep_get_nsites(eh->env, &nsites);
2839
+
2840
+ return INT2NUM(nsites);
2841
+ }
2842
+
2843
+
2844
+ /*
2845
+ * call-seq:
2846
+ * env.repmgr_set_local_site(host, port)
2847
+ *
2848
+ * specify the local site for the replication manager
2849
+ */
2850
+ VALUE env_repmgr_set_local_site(VALUE obj, VALUE host, VALUE port)
2851
+ {
2852
+ t_envh *eh;
2853
+ int rv;
2854
+
2855
+ Data_Get_Struct(obj,t_envh,eh);
2856
+ rv = eh->env->repmgr_set_local_site(eh->env, StringValuePtr(host), NUM2UINT(port), 0);
2857
+
2858
+ if ( rv != 0 ) raise_error(rv, "env_repmgr_set_local_site: %s", db_strerror(rv));
2859
+ return Qtrue;
2860
+ }
2861
+
2862
+ /*
2863
+ * call-seq:
2864
+ * env.repmgr_add_remote_site(host, port)
2865
+ *
2866
+ * add a remote for the replication manager
2867
+ */
2868
+ VALUE env_repmgr_add_remote_site(VALUE obj, VALUE host, VALUE port)
2869
+ {
2870
+ t_envh *eh;
2871
+ int rv;
2872
+ int eidp;
2873
+
2874
+ Data_Get_Struct(obj,t_envh,eh);
2875
+ rv = eh->env->repmgr_add_remote_site(eh->env, StringValuePtr(host), NUM2UINT(port), &eidp, 0);
2876
+
2877
+ if ( rv != 0 ) raise_error(rv, "env_repmgr_add_remote_site: %s", db_strerror(rv));
2878
+ return INT2NUM(eidp);
2879
+ }
2880
+
2881
+ /*
2882
+ * call-seq:
2883
+ * env.repmgr_ack_policy = int
2884
+ *
2885
+ * specify how the replication manager will handle acknowledgement of replication messages
2886
+ */
2887
+ VALUE env_repmgr_set_ack_policy(VALUE obj, VALUE policy)
2888
+ {
2889
+ t_envh *eh;
2890
+ int rv;
2891
+
2892
+ Data_Get_Struct(obj,t_envh,eh);
2893
+ rv = eh->env->repmgr_set_ack_policy(eh->env, NUM2INT(policy));
2894
+
2895
+ if ( rv != 0 ) raise_error(rv, "env_repmgr_set_ack_policy: %s", db_strerror(rv));
2896
+ return policy;
2897
+ }
2898
+
2899
+ /*
2900
+ * call-seq:
2901
+ * env.repmgr_ack_policy -> int
2902
+ *
2903
+ * returns the replication manager's acknowledgement policy
2904
+ */
2905
+ VALUE env_repmgr_get_ack_policy(VALUE obj)
2906
+ {
2907
+ t_envh *eh;
2908
+ int policy;
2909
+
2910
+ Data_Get_Struct(obj,t_envh,eh);
2911
+ eh->env->repmgr_get_ack_policy(eh->env, &policy);
2912
+
2913
+ return INT2NUM(policy);
2914
+ }
2915
+
2916
+ /*
2917
+ * call-seq:
2918
+ * env.repmgr_start(num_threads, flags)
2919
+ *
2920
+ * start the replication manager
2921
+ */
2922
+ VALUE env_repmgr_start(VALUE obj, VALUE num_threads, VALUE flags)
2923
+ {
2924
+ t_envh *eh;
2925
+ int rv;
2926
+
2927
+ Data_Get_Struct(obj,t_envh,eh);
2928
+ rv = eh->env->repmgr_start(eh->env, NUM2INT(num_threads), NUM2UINT(flags));
2929
+
2930
+ if ( rv != 0 ) raise_error(rv, "env_repmgr_start: %s", db_strerror(rv));
2931
+ return Qtrue;
2932
+ }
2933
+
2934
+ /*
2935
+ * call-seq:
2936
+ * env.repmgr_stat_print
2937
+ *
2938
+ * prints replication manager stats
2939
+ */
2940
+ VALUE env_repmgr_stat_print(VALUE obj, VALUE flags)
2941
+ {
2942
+ t_envh *eh;
2943
+ int rv;
2944
+
2945
+ Data_Get_Struct(obj,t_envh,eh);
2946
+ rv = eh->env->repmgr_stat_print(eh->env, NUM2UINT(flags));
2947
+
2948
+ if ( rv != 0 ) raise_error(rv, "env_repmgr_stat_print: %s", db_strerror(rv));
2949
+ return Qtrue;
2950
+ }
2951
+
2952
+
2752
2953
  static void txn_finish(t_txnh *txn)
2753
2954
  {
2754
2955
  if ( RTEST(ruby_debug) )
@@ -2935,7 +3136,7 @@ void Init_bdb() {
2935
3136
  rb_define_method(cDb,"associate",db_associate,4);
2936
3137
  rb_define_method(cDb,"btree_compare=",db_btree_compare_set,1);
2937
3138
  rb_define_method(cDb,"flags=",db_flags_set,1);
2938
- rb_define_method(cDb,"flags",db_flags_get,0);
3139
+ rb_define_method(cDb,"flags",db_flags_get,0);
2939
3140
  rb_define_method(cDb,"open",db_open,6);
2940
3141
  rb_define_method(cDb,"close",db_close,1);
2941
3142
  rb_define_method(cDb,"[]",db_aget,1);
@@ -2977,8 +3178,8 @@ void Init_bdb() {
2977
3178
  rb_define_method(cEnv,"close",env_close,0);
2978
3179
  rb_define_method(cEnv,"db",env_db,0);
2979
3180
  rb_define_method(cEnv,"cachesize=",env_set_cachesize,1);
2980
- rb_define_method(cEnv,"cachesize",env_get_cachesize,0);
2981
- rb_define_method(cEnv,"flags",env_get_flags,0);
3181
+ rb_define_method(cEnv,"cachesize",env_get_cachesize,0);
3182
+ rb_define_method(cEnv,"flags",env_get_flags,0);
2982
3183
  rb_define_method(cEnv,"flags_on=",env_set_flags_on,1);
2983
3184
  rb_define_method(cEnv,"flags_off=",env_set_flags_off,1);
2984
3185
  rb_define_method(cEnv,"list_dbs",env_list_dbs,0);
@@ -2995,19 +3196,31 @@ void Init_bdb() {
2995
3196
  rb_define_method(cEnv,"set_lk_detect",env_set_lk_detect,1);
2996
3197
  rb_define_method(cEnv,"get_lk_detect",env_get_lk_detect,0);
2997
3198
  rb_define_method(cEnv,"set_lk_max_locks",env_set_lk_max_locks,1);
2998
- rb_define_method(cEnv,"get_lk_max_locks",env_get_lk_max_locks,0);
3199
+ rb_define_method(cEnv,"get_lk_max_locks",env_get_lk_max_locks,0);
2999
3200
  rb_define_method(cEnv,"set_lk_max_objects",env_set_lk_max_objects,1);
3000
- rb_define_method(cEnv,"get_lk_max_objects",env_get_lk_max_objects,0);
3201
+ rb_define_method(cEnv,"get_lk_max_objects",env_get_lk_max_objects,0);
3001
3202
  rb_define_method(cEnv,"set_shm_key",env_set_shm_key,1);
3002
3203
  rb_define_method(cEnv,"get_shm_key",env_get_shm_key,0);
3003
3204
 
3004
3205
  rb_define_method(cEnv,"set_data_dir",env_set_data_dir,1);
3005
- rb_define_method(cEnv,"get_data_dirs",env_get_data_dirs,0);
3206
+ rb_define_method(cEnv,"get_data_dirs",env_get_data_dirs,0);
3006
3207
  rb_define_method(cEnv,"set_lg_dir",env_set_lg_dir,1);
3007
- rb_define_method(cEnv,"get_lg_dir",env_get_lg_dir,0);
3208
+ rb_define_method(cEnv,"get_lg_dir",env_get_lg_dir,0);
3008
3209
  rb_define_method(cEnv,"set_tmp_dir",env_set_tmp_dir,1);
3009
- rb_define_method(cEnv,"get_tmp_dir",env_get_tmp_dir,0);
3010
- rb_define_method(cEnv,"get_home",env_get_home,0);
3210
+ rb_define_method(cEnv,"get_tmp_dir",env_get_tmp_dir,0);
3211
+ rb_define_method(cEnv,"get_home",env_get_home,0);
3212
+ rb_define_method(cEnv,"set_verbose",env_set_verbose,2);
3213
+
3214
+ rb_define_method(cEnv,"rep_priority=", env_rep_set_priority, 1);
3215
+ rb_define_method(cEnv,"rep_priority", env_rep_get_priority, 0);
3216
+ rb_define_method(cEnv,"rep_nsites=", env_rep_set_nsites, 1);
3217
+ rb_define_method(cEnv,"rep_nsites", env_rep_get_nsites, 0);
3218
+ rb_define_method(cEnv,"repmgr_set_local_site", env_repmgr_set_local_site, 2);
3219
+ rb_define_method(cEnv,"repmgr_add_remote_site", env_repmgr_add_remote_site, 2);
3220
+ rb_define_method(cEnv,"repmgr_ack_policy=", env_repmgr_set_ack_policy, 1);
3221
+ rb_define_method(cEnv,"repmgr_ack_policy", env_repmgr_get_ack_policy, 0);
3222
+ rb_define_method(cEnv,"repmgr_start", env_repmgr_start, 2);
3223
+ rb_define_method(cEnv,"repmgr_stat_print", env_repmgr_stat_print, 1);
3011
3224
 
3012
3225
  cTxnStat = rb_define_class_under(mBdb,"TxnStat",rb_cObject);
3013
3226
  rb_define_method(cTxnStat,"[]",stat_aref,1);