Tune and test Go bindings for IndexManager.

Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/53131d1a
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/53131d1a
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/53131d1a

Branch: refs/heads/master
Commit: 53131d1a7ca555ca666d11885c0445da9d248d55
Parents: 70d9076
Author: Marvin Humphrey <[email protected]>
Authored: Thu Oct 29 19:12:58 2015 -0700
Committer: Marvin Humphrey <[email protected]>
Committed: Sat Oct 31 15:31:15 2015 -0700

----------------------------------------------------------------------
 go/build.go           |   8 ++++
 go/lucy/index.go      |  59 +++++++++++++++++++++++++
 go/lucy/index_test.go | 106 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 173 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/53131d1a/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 72446d4..52de435 100644
--- a/go/build.go
+++ b/go/build.go
@@ -162,6 +162,14 @@ func specClasses(parcel *cfc.Parcel) {
        bgMergerBinding.SpecMethod("Commit", "Commit() error")
        bgMergerBinding.Register()
 
+       managerBinding := cfc.NewGoClass(parcel, "Lucy::Index::IndexManager")
+       managerBinding.SpecMethod("Write_Merge_Data", "WriteMergeData(int64) 
error")
+       managerBinding.SpecMethod("Read_Merge_Data", "ReadMergeData() 
(map[string]interface{}, error)")
+       managerBinding.SpecMethod("Remove_Merge_Data", "RemoveMergeData() 
error")
+       managerBinding.SpecMethod("Make_Snapshot_Filename", 
"MakeSnapshotFilename() (string, error)")
+       managerBinding.SpecMethod("Recycle", "Recycle(PolyReader, 
DeletionsWriter, int64, bool) ([]SegReader, error)")
+       managerBinding.Register()
+
        schemaBinding := cfc.NewGoClass(parcel, "Lucy::Plan::Schema")
        schemaBinding.SpecMethod("All_Fields", "AllFields() []string")
        schemaBinding.Register()

http://git-wip-us.apache.org/repos/asf/lucy/blob/53131d1a/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index 83b36df..ba26f95 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -248,3 +248,62 @@ func (bgm *BackgroundMergerIMP) Commit() error {
                C.LUCY_BGMerger_Commit(self)
        })
 }
+
+func (im *IndexManagerIMP) WriteMergeData(cutoff int64) error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_IndexManager)(clownfish.Unwrap(im, "im"))
+               C.LUCY_IxManager_Write_Merge_Data(self, C.int64_t(cutoff))
+       })
+}
+
+func (im *IndexManagerIMP) ReadMergeData() (retval map[string]interface{}, err 
error) {
+       err = clownfish.TrapErr(func() {
+               self := (*C.lucy_IndexManager)(clownfish.Unwrap(im, "im"))
+               retvalC := C.LUCY_IxManager_Read_Merge_Data(self)
+               if retvalC != nil {
+                       defer C.cfish_decref(unsafe.Pointer(retvalC))
+                       retval = 
clownfish.ToGo(unsafe.Pointer(retvalC)).(map[string]interface{})
+               }
+       })
+       return retval, err
+}
+
+func (im *IndexManagerIMP) RemoveMergeData() error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_IndexManager)(clownfish.Unwrap(im, "im"))
+               C.LUCY_IxManager_Remove_Merge_Data(self)
+       })
+}
+
+func (im *IndexManagerIMP) MakeSnapshotFilename() (retval string, err error) {
+       err = clownfish.TrapErr(func() {
+               self := (*C.lucy_IndexManager)(clownfish.Unwrap(im, "im"))
+               retvalC := C.LUCY_IxManager_Make_Snapshot_Filename(self)
+               if retvalC != nil {
+                       defer C.cfish_decref(unsafe.Pointer(retvalC))
+                       retval = 
clownfish.ToGo(unsafe.Pointer(retvalC)).(string)
+               }
+       })
+       return retval, err
+}
+
+func (im *IndexManagerIMP) Recycle(reader PolyReader, delWriter 
DeletionsWriter,
+       cutoff int64, optimize bool) (retval []SegReader, err error) {
+       err = clownfish.TrapErr(func() {
+               self := (*C.lucy_IndexManager)(clownfish.Unwrap(im, "im"))
+               readerC := (*C.lucy_PolyReader)(clownfish.Unwrap(reader, 
"reader"))
+               delWriterC := 
(*C.lucy_DeletionsWriter)(clownfish.Unwrap(delWriter, "delWriter"))
+               vec := C.LUCY_IxManager_Recycle(self, readerC, delWriterC,
+                       C.int64_t(cutoff), C.bool(optimize))
+               if vec != nil {
+                       defer C.cfish_decref(unsafe.Pointer(vec))
+                       size := int(C.CFISH_Vec_Get_Size(vec))
+                       retval = make([]SegReader, size)
+                       for i := 0; i < size; i++ {
+                               elem := C.CFISH_Vec_Fetch(vec, C.size_t(i))
+                               retval[i] = 
WRAPSegReader(unsafe.Pointer(C.cfish_incref(unsafe.Pointer(elem))))
+                       }
+               }
+       })
+       return retval, err
+}

http://git-wip-us.apache.org/repos/asf/lucy/blob/53131d1a/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index 86055ae..a9aa279 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -18,6 +18,8 @@ package lucy
 
 import "testing"
 import "os"
+import "reflect"
+import "strings"
 
 func TestIndexerAddDoc(t *testing.T) {
        schema := createTestSchema()
@@ -141,3 +143,107 @@ func TestBackgroundMergerMisc(t *testing.T) {
                t.Errorf("Commit: %v", err)
        }
 }
+
+func TestIndexManagerAccessors(t *testing.T) {
+       host := "dev.example.com"
+       manager := NewIndexManager(host, nil)
+       if got := manager.GetHost(); got != host {
+               t.Errorf("GetHost: %v", got)
+       }
+       folder := NewRAMFolder("")
+       manager.SetFolder(folder)
+       if got := manager.GetFolder(); !reflect.DeepEqual(folder, got) {
+               t.Errorf("SetFolder/GetFolder")
+       }
+       manager.SetWriteLockTimeout(72)
+       if got := manager.GetWriteLockTimeout(); got != 72 {
+               t.Errorf("Set/GetWriteLockTimeout: %d", got)
+       }
+       manager.SetWriteLockInterval(42)
+       if got := manager.GetWriteLockInterval(); got != 42 {
+               t.Errorf("Set/GetWriteLockInterval: %d", got)
+       }
+       manager.SetMergeLockTimeout(73)
+       if got := manager.GetMergeLockTimeout(); got != 73 {
+               t.Errorf("Set/GetMergeLockTimeout: %d", got)
+       }
+       manager.SetMergeLockInterval(43)
+       if got := manager.GetMergeLockInterval(); got != 43 {
+               t.Errorf("Set/GetMergeLockInterval: %d", got)
+       }
+       manager.SetDeletionLockTimeout(71)
+       if got := manager.GetDeletionLockTimeout(); got != 71 {
+               t.Errorf("Set/GetDeletionLockTimeout: %d", got)
+       }
+       manager.SetDeletionLockInterval(41)
+       if got := manager.GetDeletionLockInterval(); got != 41 {
+               t.Errorf("Set/GetDeletionLockInterval: %d", got)
+       }
+}
+
+func TestIndexManagerLocks(t *testing.T) {
+       manager := NewIndexManager("", nil)
+       manager.SetFolder(NewRAMFolder(""))
+       if _, ok := manager.MakeWriteLock().(Lock); !ok {
+               t.Errorf("MakeWriteLock")
+       }
+       if _, ok := manager.MakeMergeLock().(Lock); !ok {
+               t.Errorf("MakeMergeLock")
+       }
+       if _, ok := manager.MakeDeletionLock().(Lock); !ok {
+               t.Errorf("MakeDeletionLock")
+       }
+       snapFile := "snapshot_4a.json"
+       if _, ok := manager.MakeSnapshotReadLock(snapFile).(SharedLock); !ok {
+               t.Errorf("MakeDeletionLock")
+       }
+}
+
+func TestIndexManagerMergeData(t *testing.T) {
+       var err error
+       manager := NewIndexManager("", nil)
+       manager.SetFolder(NewRAMFolder(""))
+       err = manager.WriteMergeData(42)
+       if err != nil {
+               t.Errorf("WriteMergeData: %v", err)
+       }
+       mergeData, err := manager.ReadMergeData()
+       if err != nil {
+               t.Errorf("ReadMergeData: %v", err)
+       }
+       if got, ok := mergeData["cutoff"].(string); !ok || got != "42" {
+               t.Errorf("ReadMergeData: %v", got)
+       }
+       err = manager.RemoveMergeData()
+       if err != nil {
+               t.Errorf("RemoveMergeData: %v", err)
+       }
+}
+
+func TestIndexManagerMisc(t *testing.T) {
+       manager := NewIndexManager("", nil)
+       manager.SetFolder(NewRAMFolder(""))
+       if got, err := manager.MakeSnapshotFilename(); !strings.Contains(got, 
"snapshot") || err != nil {
+               t.Errorf("MakeSnapshotFilename: %s, %v", got, err)
+       }
+       snapshot := NewSnapshot()
+       snapshot.AddEntry("seg_4")
+       snapshot.AddEntry("seg_5")
+       if got := manager.HighestSegNum(snapshot); got != 5 {
+               t.Errorf("HighestSegNum: %d", got)
+       }
+}
+
+func TestIndexManagerRecycle(t *testing.T) {
+       index := createTestIndex("foo", "bar", "baz")
+       manager := NewIndexManager("", nil)
+       manager.SetFolder(index)
+       indexer, _ := OpenIndexer(&OpenIndexerArgs{Index: index})
+       searcher, _ := OpenIndexSearcher(index)
+       reader := searcher.GetReader().(PolyReader)
+       delWriter := indexer.GetSegWriter().GetDelWriter()
+       segReaders, err := manager.Recycle(reader, delWriter, 0, true)
+       if err != nil || len(segReaders) != 1 {
+               t.Errorf("Recycle: (%d SegReaders) %v", len(segReaders), err)
+       }
+}

Reply via email to