xapian-core  1.4.30
databasereplicator.cc
Go to the documentation of this file.
1 
4 /* Copyright 2008 Lemur Consulting Ltd
5  * Copyright 2009,2010,2011,2012 Olly Betts
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation; either version 2 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
20  * USA
21  */
22 
23 #include <config.h>
24 
25 #include "databasereplicator.h"
26 
27 #include "xapian/error.h"
28 #include "xapian/version.h" // For XAPIAN_HAS_XXX_BACKEND.
29 
30 #include "debuglog.h"
31 #include "filetests.h"
32 
33 #if defined XAPIAN_HAS_GLASS_BACKEND && defined XAPIAN_HAS_REMOTE_BACKEND
35 #endif
36 #ifdef XAPIAN_HAS_CHERT_BACKEND
38 #endif
39 
40 using namespace std;
41 
42 namespace Xapian {
43 
44 DatabaseReplicator::~DatabaseReplicator()
45 {
46 }
47 
49 DatabaseReplicator::open(const string & path)
50 {
51  LOGCALL_STATIC(DB, DatabaseReplicator *, "DatabaseReplicator::open", path);
52 
53 #ifdef XAPIAN_HAS_CHERT_BACKEND
54  if (file_exists(path + "/iamchert")) {
55 # ifdef XAPIAN_HAS_REMOTE_BACKEND
56  return new ChertDatabaseReplicator(path);
57 # else
58  throw FeatureUnavailableError("Replication disabled");
59 # endif
60  }
61 #endif
62 
63 #ifdef XAPIAN_HAS_GLASS_BACKEND
64  if (file_exists(path + "/iamglass")) {
65 # ifdef XAPIAN_HAS_REMOTE_BACKEND
66  return new GlassDatabaseReplicator(path);
67 # else
68  throw FeatureUnavailableError("Replication disabled");
69 # endif
70  }
71 #endif
72 
73  if (file_exists(path + "/iamflint")) {
74  throw FeatureUnavailableError("Flint backend no longer supported");
75  }
76 
77  if (file_exists(path + "/iambrass")) {
78  throw FeatureUnavailableError("Brass backend no longer supported");
79  }
80 
81  throw DatabaseOpeningError("Couldn't detect type of database: " + path);
82 }
83 
84 }
Support for chert database replication.
DatabaseOpeningError indicates failure to open a database.
Definition: error.h:581
Base class for database replicator objects.
Indicates an attempt to use a feature which is unavailable.
Definition: error.h:719
Class to manage replication of databases.
Debug logging macros.
#define LOGCALL_STATIC(CATEGORY, TYPE, FUNC, PARAMS)
Definition: debuglog.h:491
Hierarchy of classes which Xapian can throw as exceptions.
Utility functions for testing files.
bool file_exists(const char *path)
Test if a file exists.
Definition: filetests.h:39
Support for glass database replication.
WritableDatabase open()
Construct a WritableDatabase object for a new, empty InMemory database.
Definition: dbfactory.h:104
The Xapian namespace contains public interfaces for the Xapian library.
Definition: compactor.cc:80
Define preprocessor symbols for the library version.