bdb 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);