Merge branch 'master' into feature-remote-logs
This commit is contained in:
commit
e67f951c06
|
@ -21,12 +21,12 @@
|
||||||
<ClCompile Include="FDBLibTLSSession.cpp" />
|
<ClCompile Include="FDBLibTLSSession.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
<PlatformToolset>v140_xp</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
<PlatformToolset>v140_xp</PlatformToolset>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
@ -42,7 +42,7 @@ ITLSPolicy *FDBLibTLSPlugin::create_policy(ITLSLogFunc logf) {
|
||||||
return new FDBLibTLSPolicy(Reference<FDBLibTLSPlugin>::addRef(this), logf);
|
return new FDBLibTLSPolicy(Reference<FDBLibTLSPlugin>::addRef(this), logf);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" BOOST_SYMBOL_EXPORT void *get_plugin(const char *plugin_type_name_and_version) {
|
extern "C" BOOST_SYMBOL_EXPORT void *get_tls_plugin(const char *plugin_type_name_and_version) {
|
||||||
if (strcmp(plugin_type_name_and_version, FDBLibTLSPlugin::get_plugin_type_name_and_version()) == 0) {
|
if (strcmp(plugin_type_name_and_version, FDBLibTLSPlugin::get_plugin_type_name_and_version()) == 0) {
|
||||||
return new FDBLibTLSPlugin;
|
return new FDBLibTLSPlugin;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,28 @@
|
||||||
FDBLibTLS_CFLAGS := -fPIC -I/usr/local/include -I$(BOOSTDIR) -Ifdbrpc
|
#
|
||||||
FDBLibTLS_STATIC_LIBS := -ltls -lssl -lcrypto
|
# local.mk
|
||||||
FDBLibTLS_LDFLAGS := -L/usr/local/lib -static-libstdc++ -static-libgcc -lrt
|
#
|
||||||
FDBLibTLS_LDFLAGS += -Wl,-soname,FDBLibTLS.so -Wl,--version-script=FDBLibTLS/FDBLibTLS.map
|
# This source file is part of the FoundationDB open source project
|
||||||
|
#
|
||||||
|
# Copyright 2013-2018 Apple Inc. and the FoundationDB project authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
# The plugin isn't a typical library, so it feels more sensible to have a copy
|
# -*- mode: makefile; -*-
|
||||||
# of it in bin/.
|
|
||||||
bin/fdb-libressl-plugin.$(DLEXT): lib/libFDBLibTLS.$(DLEXT)
|
|
||||||
@cp $< $@
|
|
||||||
|
|
||||||
TARGETS += bin/fdb-libressl-plugin.$(DLEXT)
|
FDBLibTLS_BUILD_SOURCES +=
|
||||||
|
|
||||||
|
|
||||||
|
FDBLibTLS_CFLAGS := -fPIC -I/usr/local/include -I$(BOOSTDIR) -Ifdbrpc -DUSE_UCONTEXT
|
||||||
|
|
||||||
|
lib/libFDBLibTLS.a: bin/coverage.FDBLibTLS.xml
|
||||||
|
|
7
Makefile
7
Makefile
|
@ -87,6 +87,13 @@ CFLAGS += -g
|
||||||
|
|
||||||
# valgrind-compatibile builds are enabled by uncommenting lines in valgind.mk
|
# valgrind-compatibile builds are enabled by uncommenting lines in valgind.mk
|
||||||
|
|
||||||
|
ifdef TLS_DISABLED
|
||||||
|
CFLAGS += -DTLS_DISABLED
|
||||||
|
TLS_LIBS :=
|
||||||
|
else
|
||||||
|
TLS_LIBS := lib/libFDBLibTLS.a $(shell gcc --print-file-name=libtls.a) $(shell gcc --print-file-name=libssl.a) $(shell gcc --print-file-name=libcrypto.a)
|
||||||
|
endif
|
||||||
|
|
||||||
CXXFLAGS += -Wno-deprecated
|
CXXFLAGS += -Wno-deprecated
|
||||||
LDFLAGS :=
|
LDFLAGS :=
|
||||||
LIBS :=
|
LIBS :=
|
||||||
|
|
|
@ -80,7 +80,7 @@ FOR /F "tokens=1" %%i in ('hg.exe id') do copy /Y "$(TargetPath)" "$(TargetPath)
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<AdditionalOptions>/bigobj @..\..\flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @..\..\flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -95,7 +95,7 @@ FOR /F "tokens=1" %%i in ('hg.exe id') do copy /Y "$(TargetPath)" "$(TargetPath)
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalOptions>/bigobj @..\..\flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @..\..\flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -121,4 +121,4 @@ FOR /F "tokens=1" %%i in ('hg.exe id') do copy /Y "$(TargetPath)" "$(TargetPath)
|
||||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
fdb_c_CFLAGS := $(fdbclient_CFLAGS)
|
fdb_c_CFLAGS := $(fdbclient_CFLAGS)
|
||||||
fdb_c_LDFLAGS := $(fdbrpc_LDFLAGS)
|
fdb_c_LDFLAGS := $(fdbrpc_LDFLAGS)
|
||||||
fdb_c_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
|
fdb_c_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a $(TLS_LIBS)
|
||||||
fdb_c_tests_LIBS := -Llib -lfdb_c
|
fdb_c_tests_LIBS := -Llib -lfdb_c
|
||||||
fdb_c_tests_HEADERS := -Ibindings/c
|
fdb_c_tests_HEADERS := -Ibindings/c
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\c</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\c</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<AdditionalOptions>/bigobj @..\..\flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @..\..\flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
@ -118,7 +118,7 @@
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\c</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\c</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
|
@ -147,4 +147,4 @@
|
||||||
<Target Name="MyPreCompileSteps" AfterTargets="CLCompile">
|
<Target Name="MyPreCompileSteps" AfterTargets="CLCompile">
|
||||||
<Exec Command=""$(SolutionDir)bin\$(Configuration)\coveragetool.exe" "$(OutDir)coverage.$(TargetName).xml" @(ActorCompiler -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLInclude -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLCompile -> '%(RelativeDir)%(Filename)%(Extension)', ' ')" />
|
<Exec Command=""$(SolutionDir)bin\$(Configuration)\coveragetool.exe" "$(OutDir)coverage.$(TargetName).xml" @(ActorCompiler -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLInclude -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLCompile -> '%(RelativeDir)%(Filename)%(Extension)', ' ')" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
@ -125,4 +125,4 @@
|
||||||
<Import Project="..\..\..\flow\actorcompiler\ActorCompiler.targets" />
|
<Import Project="..\..\..\flow\actorcompiler\ActorCompiler.targets" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -65,7 +65,10 @@ func windowSize(start int64) int64 {
|
||||||
func (hca highContentionAllocator) allocate(tr fdb.Transaction, s subspace.Subspace) (subspace.Subspace, error) {
|
func (hca highContentionAllocator) allocate(tr fdb.Transaction, s subspace.Subspace) (subspace.Subspace, error) {
|
||||||
for {
|
for {
|
||||||
rr := tr.Snapshot().GetRange(hca.counters, fdb.RangeOptions{Limit: 1, Reverse: true})
|
rr := tr.Snapshot().GetRange(hca.counters, fdb.RangeOptions{Limit: 1, Reverse: true})
|
||||||
kvs := rr.GetSliceOrPanic()
|
kvs, e := rr.GetSliceWithError()
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
|
||||||
var start int64
|
var start int64
|
||||||
var window int64
|
var window int64
|
||||||
|
@ -135,7 +138,10 @@ func (hca highContentionAllocator) allocate(tr fdb.Transaction, s subspace.Subsp
|
||||||
|
|
||||||
allocatorMutex.Unlock()
|
allocatorMutex.Unlock()
|
||||||
|
|
||||||
kvs = latestCounter.GetSliceOrPanic()
|
kvs, e = latestCounter.GetSliceWithError()
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
if len(kvs) > 0 {
|
if len(kvs) > 0 {
|
||||||
t, e := hca.counters.Unpack(kvs[0].Key)
|
t, e := hca.counters.Unpack(kvs[0].Key)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
|
|
@ -102,8 +102,10 @@ func (dl directoryLayer) createOrOpen(rtr fdb.ReadTransaction, tr *fdb.Transacti
|
||||||
return nil, errors.New("the directory already exists")
|
return nil, errors.New("the directory already exists")
|
||||||
}
|
}
|
||||||
|
|
||||||
if layer != nil && bytes.Compare(existingNode._layer.MustGet(), layer) != 0 {
|
if layer != nil {
|
||||||
return nil, errors.New("the directory was created with an incompatible layer")
|
if l, e := existingNode._layer.Get(); e != nil || bytes.Compare(l, layer) != 0 {
|
||||||
|
return nil, errors.New("the directory was created with an incompatible layer")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return existingNode.getContents(dl, nil)
|
return existingNode.getContents(dl, nil)
|
||||||
|
@ -325,7 +327,11 @@ func (dl directoryLayer) Move(t fdb.Transactor, oldPath []string, newPath []stri
|
||||||
|
|
||||||
dl.removeFromParent(tr, oldPath)
|
dl.removeFromParent(tr, oldPath)
|
||||||
|
|
||||||
return dl.contentsOfNode(oldNode.subspace, newPath, oldNode._layer.MustGet())
|
l, e := oldNode._layer.Get()
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
return dl.contentsOfNode(oldNode.subspace, newPath, l)
|
||||||
})
|
})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return nil, e
|
return nil, e
|
||||||
|
@ -415,7 +421,10 @@ func (dl directoryLayer) subdirNames(rtr fdb.ReadTransaction, node subspace.Subs
|
||||||
var ret []string
|
var ret []string
|
||||||
|
|
||||||
for ri.Advance() {
|
for ri.Advance() {
|
||||||
kv := ri.MustGet()
|
kv, e := ri.Get()
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
|
|
||||||
p, e := sd.Unpack(kv.Key)
|
p, e := sd.Unpack(kv.Key)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
@ -453,7 +462,10 @@ func (dl directoryLayer) nodeContainingKey(rtr fdb.ReadTransaction, key []byte)
|
||||||
bk, _ := dl.nodeSS.FDBRangeKeys()
|
bk, _ := dl.nodeSS.FDBRangeKeys()
|
||||||
kr := fdb.KeyRange{bk, fdb.Key(append(dl.nodeSS.Pack(tuple.Tuple{key}), 0x00))}
|
kr := fdb.KeyRange{bk, fdb.Key(append(dl.nodeSS.Pack(tuple.Tuple{key}), 0x00))}
|
||||||
|
|
||||||
kvs := rtr.GetRange(kr, fdb.RangeOptions{Reverse: true, Limit: 1}).GetSliceOrPanic()
|
kvs, e := rtr.GetRange(kr, fdb.RangeOptions{Reverse: true, Limit: 1}).GetSliceWithError()
|
||||||
|
if e != nil {
|
||||||
|
return nil, e
|
||||||
|
}
|
||||||
if len(kvs) == 1 {
|
if len(kvs) == 1 {
|
||||||
pp, e := dl.nodeSS.Unpack(kvs[0].Key)
|
pp, e := dl.nodeSS.Unpack(kvs[0].Key)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
@ -495,7 +507,10 @@ func (dl directoryLayer) isPrefixFree(rtr fdb.ReadTransaction, prefix []byte) (b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dl directoryLayer) checkVersion(rtr fdb.ReadTransaction, tr *fdb.Transaction) error {
|
func (dl directoryLayer) checkVersion(rtr fdb.ReadTransaction, tr *fdb.Transaction) error {
|
||||||
version := rtr.Get(dl.rootNode.Sub([]byte("version"))).MustGet()
|
version, err := rtr.Get(dl.rootNode.Sub([]byte("version"))).Get()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if version == nil {
|
if version == nil {
|
||||||
if tr != nil {
|
if tr != nil {
|
||||||
|
|
|
@ -67,5 +67,9 @@ func (n *node) getPartitionSubpath() []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *node) getContents(dl directoryLayer, tr *fdb.Transaction) (DirectorySubspace, error) {
|
func (n *node) getContents(dl directoryLayer, tr *fdb.Transaction) (DirectorySubspace, error) {
|
||||||
return dl.contentsOfNode(n.subspace, n.path, n._layer.MustGet())
|
l, err := n._layer.Get()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dl.contentsOfNode(n.subspace, n.path, l)
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)bindings\c</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)bindings\c</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<AdditionalOptions>/bigobj "@$(SolutionDir)flow/no_intellisense.opt" %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj "@$(SolutionDir)flow/no_intellisense.opt" %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)bindings\c</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(SolutionDir)bindings\c</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=_WIN32_WINNT_WS03;WINVER=_WIN32_WINNT_WS03;NTDDI_VERSION=NTDDI_WS03;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<AdditionalOptions>/bigobj "@$(SolutionDir)flow/no_intellisense.opt" %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj "@$(SolutionDir)flow/no_intellisense.opt" %(AdditionalOptions)</AdditionalOptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -99,4 +99,4 @@
|
||||||
<Message Text="Cleaning old dll files" Importance="high" />
|
<Message Text="Cleaning old dll files" Importance="high" />
|
||||||
<Delete Files="@(FilesToDelete)" />
|
<Delete Files="@(FilesToDelete)" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -22,7 +22,7 @@ RUN cd /opt/ && wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.6.4
|
||||||
gpg --import libressl.asc && gpg --verify libressl-2.6.4.tar.gz.asc libressl-2.6.4.tar.gz &&\
|
gpg --import libressl.asc && gpg --verify libressl-2.6.4.tar.gz.asc libressl-2.6.4.tar.gz &&\
|
||||||
tar -xzf libressl-2.6.4.tar.gz && cd libressl-2.6.4 &&\
|
tar -xzf libressl-2.6.4.tar.gz && cd libressl-2.6.4 &&\
|
||||||
./configure CFLAGS="-fPIC -O3" && make -j4 && make install &&\
|
./configure CFLAGS="-fPIC -O3" && make -j4 && make install &&\
|
||||||
cd /opt/ # && rm -r libressl-2.6.4/ libressl-2.6.4.tar.gz libressl-2.6.4.tar.gz.asc libressl.asc
|
cd /opt/ && rm -r libressl-2.6.4/ libressl-2.6.4.tar.gz libressl-2.6.4.tar.gz.asc libressl.asc
|
||||||
|
|
||||||
RUN LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 locale-gen en_US.UTF-8
|
RUN LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 locale-gen en_US.UTF-8
|
||||||
|
|
||||||
|
@ -33,3 +33,6 @@ ENV TARGET_LIBC_VERSION=$TARGET_LIBC_VERSION
|
||||||
|
|
||||||
ARG CC=/usr/bin/gcc
|
ARG CC=/usr/bin/gcc
|
||||||
ENV CC=$CC
|
ENV CC=$CC
|
||||||
|
|
||||||
|
ARG LIBRARY_PATH=/usr/local/lib
|
||||||
|
ENV LIBRARY_PATH=$LD_FLAGS
|
||||||
|
|
|
@ -121,9 +121,7 @@ ifeq ($(PLATFORM),linux)
|
||||||
@rm -f packages/foundationdb-server-*.rpm packages/foundationdb-clients-*.rpm
|
@rm -f packages/foundationdb-server-*.rpm packages/foundationdb-clients-*.rpm
|
||||||
@packaging/rpm/buildrpms.sh $(VERSION) $(PKGRELEASE)
|
@packaging/rpm/buildrpms.sh $(VERSION) $(PKGRELEASE)
|
||||||
|
|
||||||
FDBTLS: bin/fdb-libressl-plugin.$(DLEXT)
|
packages: DEB RPM JAVA_RELEASE FDBTESTS FDBHEADERS
|
||||||
|
|
||||||
packages: DEB RPM JAVA_RELEASE FDBTESTS FDBHEADERS FDBTLS
|
|
||||||
|
|
||||||
packages_clean: DEB_clean RPM_clean JAVA_RELEASE_clean FDBHEADERS_clean
|
packages_clean: DEB_clean RPM_clean JAVA_RELEASE_clean FDBHEADERS_clean
|
||||||
|
|
||||||
|
|
|
@ -159,4 +159,9 @@ info:
|
||||||
@echo "User: ($(USERID)) $(USER)"
|
@echo "User: ($(USERID)) $(USER)"
|
||||||
@echo "Java Version: ($(JAVAVERMAJOR).$(JAVAVERMINOR)) $(JAVAVER)"
|
@echo "Java Version: ($(JAVAVERMAJOR).$(JAVAVERMINOR)) $(JAVAVER)"
|
||||||
@echo "Platform: $(PLATFORM)"
|
@echo "Platform: $(PLATFORM)"
|
||||||
|
ifdef TLS_DISABLED
|
||||||
|
@echo "TLS: Disabled"
|
||||||
|
else
|
||||||
|
@echo "TLS: Enabled"
|
||||||
|
endif
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
|
@ -9,7 +9,7 @@ Introduction
|
||||||
|
|
||||||
Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), are protocols designed to provide communication security over public networks. Users exchange a symmetric session key that is used to encrypt data exchanged between the parties.
|
Transport Layer Security (TLS) and its predecessor, Secure Sockets Layer (SSL), are protocols designed to provide communication security over public networks. Users exchange a symmetric session key that is used to encrypt data exchanged between the parties.
|
||||||
|
|
||||||
By default, a FoundationDB cluster uses *unencrypted* connections among client and server processes. This document describes the `Transport Layer Security <http://en.wikipedia.org/wiki/Transport_Layer_Security>`_ (TLS) capabilities of FoundationDB, which enable security and authentication through a public/private key infrastructure. TLS is provided in FoundationDB via a plugin-based architecture. This document will describe the basic TLS capabilities of FoundationDB and document the default plugin, which is based on `LibreSSL <https://www.libressl.org/>`_. TLS-enabled servers will only communicate with other TLS-enabled servers and TLS-enabled clients. Therefore, a cluster's machines must all enable TLS in order for TLS to be used.
|
By default, a FoundationDB cluster uses *unencrypted* connections among client and server processes. This document describes the `Transport Layer Security <http://en.wikipedia.org/wiki/Transport_Layer_Security>`_ (TLS) capabilities of FoundationDB, which enable security and authentication through a public/private key infrastructure. TLS is compiled into each FoundationDB binary. This document will describe the basic TLS capabilities of FoundationDB and document its implementation, which is based on `LibreSSL <https://www.libressl.org/>`_. TLS-enabled servers will only communicate with other TLS-enabled servers and TLS-enabled clients. Therefore, a cluster's machines must all enable TLS in order for TLS to be used.
|
||||||
|
|
||||||
|
|
||||||
Setting Up FoundationDB to use TLS
|
Setting Up FoundationDB to use TLS
|
||||||
|
@ -42,23 +42,22 @@ Enabling TLS on an existing (non-TLS) cluster cannot be accomplished without dow
|
||||||
|
|
||||||
3) Restart the cluster and the clients.
|
3) Restart the cluster and the clients.
|
||||||
|
|
||||||
.. _configuring-tls-plugin:
|
.. _configuring-tls:
|
||||||
|
|
||||||
Configuring the TLS Plugin
|
Configuring TLS
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
The location and operation of the TLS plugin are configured through four settings. These settings can be provided as command-line options, client options, or environment variables, and are named as follows:
|
The operation of TLS is configured through five settings. These settings can be provided as command-line options, client options, or environment variables, and are named as follows:
|
||||||
|
|
||||||
======================== ==================== ============================ ==================================================
|
======================== ==================== ============================ ==================================================
|
||||||
Command-line Option Client Option Environment Variable Purpose
|
Command-line Option Client Option Environment Variable Purpose
|
||||||
======================== ==================== ============================ ==================================================
|
======================== ==================== ============================ ==================================================
|
||||||
``tls_plugin`` ``TLS_plugin`` ``FDB_TLS_PLUGIN`` Path to the file to be loaded as the TLS plugin
|
|
||||||
``tls_certificate_file`` ``TLS_cert_path`` ``FDB_TLS_CERTIFICATE_FILE`` Path to the file from which the local certificates
|
``tls_certificate_file`` ``TLS_cert_path`` ``FDB_TLS_CERTIFICATE_FILE`` Path to the file from which the local certificates
|
||||||
can be loaded, used by the plugin
|
can be loaded
|
||||||
``tls_key_file`` ``TLS_key_path`` ``FDB_TLS_KEY_FILE`` Path to the file from which to load the private
|
``tls_key_file`` ``TLS_key_path`` ``FDB_TLS_KEY_FILE`` Path to the file from which to load the private
|
||||||
key, used by the plugin
|
key
|
||||||
``tls_verify_peers`` ``TLS_verify_peers`` ``FDB_TLS_VERIFY_PEERS`` The byte-string for the verification of peer
|
``tls_verify_peers`` ``TLS_verify_peers`` ``FDB_TLS_VERIFY_PEERS`` The byte-string for the verification of peer
|
||||||
certificates and sessions, used by the plugin
|
certificates and sessions
|
||||||
``tls_password`` ``TLS_password`` ``FDB_TLS_PASSWORD`` The byte-string representing the passcode for
|
``tls_password`` ``TLS_password`` ``FDB_TLS_PASSWORD`` The byte-string representing the passcode for
|
||||||
unencrypting the private key
|
unencrypting the private key
|
||||||
``tls_ca_file`` ``TLS_ca_path`` ``FDB_TLS_CA_FILE`` Path to the file containing the CA certificates
|
``tls_ca_file`` ``TLS_ca_path`` ``FDB_TLS_CA_FILE`` Path to the file containing the CA certificates
|
||||||
|
@ -73,22 +72,11 @@ The value for each setting can be specified in more than one way. The actual va
|
||||||
|
|
||||||
As with all other command-line options to ``fdbserver``, the TLS settings can be specified in the :ref:`[fdbserver] section of the configuration file <foundationdb-conf-fdbserver>`.
|
As with all other command-line options to ``fdbserver``, the TLS settings can be specified in the :ref:`[fdbserver] section of the configuration file <foundationdb-conf-fdbserver>`.
|
||||||
|
|
||||||
The settings for certificate file, key file, peer verification, password and CA file are interpreted by the loaded plugin.
|
The settings for certificate file, key file, peer verification, password and CA file are interpreted by the software.
|
||||||
|
|
||||||
Default Values
|
Default Values
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Plugin default location
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Similarly, if a value is not specified for the parameter ``tls_plugin``, the file will be specified by the environment variable ``FDB_TLS_PLUGIN`` or, if this variable is not set, the system-dependent location:
|
|
||||||
|
|
||||||
* Linux: ``/usr/lib/foundationdb/plugins/fdb-libressl-plugin.so``
|
|
||||||
* macOS: ``/usr/local/foundationdb/plugins/fdb-libressl-plugin.dylib``
|
|
||||||
* Windows: ``C:\Program Files\foundationdb\plugins\fdb-libressl-plugin.dll``
|
|
||||||
|
|
||||||
On Windows, this location will be relative to the chosen installation location. The environment variable ``FOUNDATIONDB_INSTALL_PATH`` will be used in place of ``C:\Program Files\foundationdb\`` to determine this location.
|
|
||||||
|
|
||||||
Certificate file default location
|
Certificate file default location
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -106,31 +94,29 @@ The default peer verification is ``Check.Valid=1``.
|
||||||
Default Password
|
Default Password
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
There is no default password. If no password is specified, the plugin assumes that private key is unencrypted.
|
There is no default password. If no password is specified, it is assumed that the private key is unencrypted.
|
||||||
|
|
||||||
CA file default location
|
CA file default location
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
If a value is not specified, the plugin searches for certs in the default openssl certs location.
|
If a value is not specified, the software searches for certs in the default openssl certs location.
|
||||||
|
|
||||||
Parameters and client bindings
|
Parameters and client bindings
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
When loading a TLS plugin from a non-default location when using a client binding, the ``TLS_PLUGIN`` network option must be specified before any other TLS option. Because a loaded TLS plugin is allowed to reject the values specified in the other options, the plugin load operation will be forced by specifying one of the other options, if it not already specified.
|
The default LibreSSL-based implementation
|
||||||
|
|
||||||
The default LibreSSL-based plugin
|
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
FoundationDB offers a TLS plugin based on the LibreSSL library. By default, it will be loaded automatically when participating in a TLS-enabled cluster.
|
FoundationDB offers TLS based on the LibreSSL library. By default, it will be enabled automatically when participating in a TLS-enabled cluster.
|
||||||
|
|
||||||
For the plugin to operate, each process (both server and client) must have an X509 certificate, its corresponding private key, and potentially the certificates with which is was signed. When a process begins to communicate with a FoundationDB server process, the peer's certificate is checked to see if it is trusted and the fields of the peer certificate are verified. Peers must share the same root trusted certificate, and they must both present certificates whose signing chain includes this root certificate.
|
For TLS to operate, each process (both server and client) must have an X509 certificate, its corresponding private key, and potentially the certificates with which is was signed. When a process begins to communicate with a FoundationDB server process, the peer's certificate is checked to see if it is trusted and the fields of the peer certificate are verified. Peers must share the same root trusted certificate, and they must both present certificates whose signing chain includes this root certificate.
|
||||||
|
|
||||||
If the local certificate and chain is invalid, a FoundationDB server process bound to a TLS address will not start. In the case of invalid certificates on a client, the client will be able to start but will be unable to connect any TLS-enabled cluster.
|
If the local certificate and chain is invalid, a FoundationDB server process bound to a TLS address will not start. In the case of invalid certificates on a client, the client will be able to start but will be unable to connect any TLS-enabled cluster.
|
||||||
|
|
||||||
Formats
|
Formats
|
||||||
-------
|
-------
|
||||||
|
|
||||||
The LibreSSL plugin can read certificates and their private keys in base64-encoded DER-formatted X.509 format (which is known as PEM). A PEM file can contain both certificates and a private key or the two can be stored in separate files.
|
LibreSSL can read certificates and their private keys in base64-encoded DER-formatted X.509 format (which is known as PEM). A PEM file can contain both certificates and a private key or the two can be stored in separate files.
|
||||||
|
|
||||||
Required files
|
Required files
|
||||||
--------------
|
--------------
|
||||||
|
|
|
@ -78,7 +78,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
fdbbackup_CFLAGS := $(fdbclient_CFLAGS)
|
fdbbackup_CFLAGS := $(fdbclient_CFLAGS)
|
||||||
fdbbackup_LDFLAGS := $(fdbrpc_LDFLAGS)
|
fdbbackup_LDFLAGS := $(fdbrpc_LDFLAGS)
|
||||||
fdbbackup_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
|
fdbbackup_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a $(TLS_LIBS)
|
||||||
|
|
||||||
ifeq ($(PLATFORM),linux)
|
ifeq ($(PLATFORM),linux)
|
||||||
fdbbackup_LIBS += -ldl -lpthread -lrt
|
fdbbackup_LIBS += -ldl -lpthread -lrt
|
||||||
|
|
|
@ -72,7 +72,9 @@ CSimpleOpt::SOption g_rgOptions[] = {
|
||||||
{ OPT_VERSION, "--version", SO_NONE },
|
{ OPT_VERSION, "--version", SO_NONE },
|
||||||
{ OPT_VERSION, "-v", SO_NONE },
|
{ OPT_VERSION, "-v", SO_NONE },
|
||||||
|
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
TLS_OPTION_FLAGS
|
TLS_OPTION_FLAGS
|
||||||
|
#endif
|
||||||
|
|
||||||
SO_END_OF_OPTIONS
|
SO_END_OF_OPTIONS
|
||||||
};
|
};
|
||||||
|
@ -400,7 +402,9 @@ static void printProgramUsage(const char* name) {
|
||||||
" and then exits.\n"
|
" and then exits.\n"
|
||||||
" --no-status Disables the initial status check done when starting\n"
|
" --no-status Disables the initial status check done when starting\n"
|
||||||
" the CLI.\n"
|
" the CLI.\n"
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
TLS_HELP
|
TLS_HELP
|
||||||
|
#endif
|
||||||
" -v, --version Print FoundationDB CLI version information and exit.\n"
|
" -v, --version Print FoundationDB CLI version information and exit.\n"
|
||||||
" -h, --help Display this help and exit.\n");
|
" -h, --help Display this help and exit.\n");
|
||||||
}
|
}
|
||||||
|
@ -1224,7 +1228,7 @@ void printStatus(StatusObjectReader statusObj, StatusClient::StatusLevel level,
|
||||||
}
|
}
|
||||||
if(drSecondaryTags.size() > 0) {
|
if(drSecondaryTags.size() > 0) {
|
||||||
outputString += format("%d as secondary", drSecondaryTags.size());
|
outputString += format("%d as secondary", drSecondaryTags.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// status details
|
// status details
|
||||||
|
@ -2147,14 +2151,10 @@ struct CLIOptions {
|
||||||
initialStatusCheck = false;
|
initialStatusCheck = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
// TLS Options
|
// TLS Options
|
||||||
case TLSOptions::OPT_TLS_PLUGIN:
|
case TLSOptions::OPT_TLS_PLUGIN:
|
||||||
try {
|
args.OptionArg();
|
||||||
setNetworkOption(FDBNetworkOptions::TLS_PLUGIN, std::string(args.OptionArg()));
|
|
||||||
} catch( Error& e ) {
|
|
||||||
fprintf(stderr, "ERROR: cannot load TLS plugin `%s' (%s)\n", args.OptionArg(), e.what());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case TLSOptions::OPT_TLS_CERTIFICATES:
|
case TLSOptions::OPT_TLS_CERTIFICATES:
|
||||||
tlsCertPath = args.OptionArg();
|
tlsCertPath = args.OptionArg();
|
||||||
|
@ -2171,6 +2171,7 @@ struct CLIOptions {
|
||||||
case TLSOptions::OPT_TLS_VERIFY_PEERS:
|
case TLSOptions::OPT_TLS_VERIFY_PEERS:
|
||||||
tlsVerifyPeers = args.OptionArg();
|
tlsVerifyPeers = args.OptionArg();
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case OPT_HELP:
|
case OPT_HELP:
|
||||||
printProgramUsage(program_name.c_str());
|
printProgramUsage(program_name.c_str());
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3203,6 +3204,7 @@ int main(int argc, char **argv) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.tlsCAPath.size()) {
|
if (opt.tlsCAPath.size()) {
|
||||||
try {
|
try {
|
||||||
setNetworkOption(FDBNetworkOptions::TLS_CA_PATH, opt.tlsCAPath);
|
setNetworkOption(FDBNetworkOptions::TLS_CA_PATH, opt.tlsCAPath);
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..\zookeeper\win32;..\zookeeper\generated;..\zookeeper\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\zookeeper\win32;..\zookeeper\generated;..\zookeeper\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>..\zookeeper\win32;..\zookeeper\generated;..\zookeeper\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\zookeeper\win32;..\zookeeper\generated;..\zookeeper\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
@ -131,4 +131,4 @@
|
||||||
<Import Project="..\flow\actorcompiler\ActorCompiler.targets" />
|
<Import Project="..\flow\actorcompiler\ActorCompiler.targets" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
fdbcli_CFLAGS := $(fdbclient_CFLAGS)
|
fdbcli_CFLAGS := $(fdbclient_CFLAGS)
|
||||||
fdbcli_LDFLAGS := $(fdbrpc_LDFLAGS)
|
fdbcli_LDFLAGS := $(fdbrpc_LDFLAGS)
|
||||||
fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a -ldl
|
fdbcli_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a -ldl $(TLS_LIBS)
|
||||||
fdbcli_STATIC_LIBS :=
|
fdbcli_STATIC_LIBS :=
|
||||||
|
|
||||||
fdbcli_GENERATED_SOURCES += versions.h
|
fdbcli_GENERATED_SOURCES += versions.h
|
||||||
|
|
|
@ -455,7 +455,7 @@ ACTOR static Future<Void> clientStatusUpdateActor(DatabaseContext *cx) {
|
||||||
ACTOR static Future<Void> monitorMasterProxiesChange(Reference<AsyncVar<ClientDBInfo>> clientDBInfo, AsyncTrigger *triggerVar) {
|
ACTOR static Future<Void> monitorMasterProxiesChange(Reference<AsyncVar<ClientDBInfo>> clientDBInfo, AsyncTrigger *triggerVar) {
|
||||||
state vector< MasterProxyInterface > curProxies;
|
state vector< MasterProxyInterface > curProxies;
|
||||||
curProxies = clientDBInfo->get().proxies;
|
curProxies = clientDBInfo->get().proxies;
|
||||||
|
|
||||||
loop{
|
loop{
|
||||||
Void _ = wait(clientDBInfo->onChange());
|
Void _ = wait(clientDBInfo->onChange());
|
||||||
if (clientDBInfo->get().proxies != curProxies) {
|
if (clientDBInfo->get().proxies != curProxies) {
|
||||||
|
@ -471,10 +471,10 @@ DatabaseContext::DatabaseContext(
|
||||||
Standalone<StringRef> dbName, Standalone<StringRef> dbId,
|
Standalone<StringRef> dbName, Standalone<StringRef> dbId,
|
||||||
int taskID, LocalityData clientLocality, bool enableLocalityLoadBalance, bool lockAware )
|
int taskID, LocalityData clientLocality, bool enableLocalityLoadBalance, bool lockAware )
|
||||||
: clientInfo(clientInfo), masterProxiesChangeTrigger(), cluster(cluster), clientInfoMonitor(clientInfoMonitor), dbName(dbName), dbId(dbId),
|
: clientInfo(clientInfo), masterProxiesChangeTrigger(), cluster(cluster), clientInfoMonitor(clientInfoMonitor), dbName(dbName), dbId(dbId),
|
||||||
transactionReadVersions(0), transactionLogicalReads(0), transactionPhysicalReads(0), transactionCommittedMutations(0), transactionCommittedMutationBytes(0), transactionsCommitStarted(0),
|
transactionReadVersions(0), transactionLogicalReads(0), transactionPhysicalReads(0), transactionCommittedMutations(0), transactionCommittedMutationBytes(0), transactionsCommitStarted(0),
|
||||||
transactionsCommitCompleted(0), transactionsTooOld(0), transactionsFutureVersions(0), transactionsNotCommitted(0), transactionsMaybeCommitted(0), transactionsResourceConstrained(0), taskID(taskID),
|
transactionsCommitCompleted(0), transactionsTooOld(0), transactionsFutureVersions(0), transactionsNotCommitted(0), transactionsMaybeCommitted(0), transactionsResourceConstrained(0), taskID(taskID),
|
||||||
outstandingWatches(0), maxOutstandingWatches(CLIENT_KNOBS->DEFAULT_MAX_OUTSTANDING_WATCHES), clientLocality(clientLocality), enableLocalityLoadBalance(enableLocalityLoadBalance), lockAware(lockAware),
|
outstandingWatches(0), maxOutstandingWatches(CLIENT_KNOBS->DEFAULT_MAX_OUTSTANDING_WATCHES), clientLocality(clientLocality), enableLocalityLoadBalance(enableLocalityLoadBalance), lockAware(lockAware),
|
||||||
latencies(1000), readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000)
|
latencies(1000), readLatencies(1000), commitLatencies(1000), GRVLatencies(1000), mutationsPerCommit(1000), bytesPerCommit(1000)
|
||||||
{
|
{
|
||||||
logger = databaseLogger( this );
|
logger = databaseLogger( this );
|
||||||
locationCacheSize = g_network->isSimulated() ?
|
locationCacheSize = g_network->isSimulated() ?
|
||||||
|
@ -489,7 +489,7 @@ DatabaseContext::DatabaseContext(
|
||||||
}
|
}
|
||||||
|
|
||||||
ACTOR static Future<Void> monitorClientInfo( Reference<AsyncVar<Optional<ClusterInterface>>> clusterInterface, Standalone<StringRef> dbName,
|
ACTOR static Future<Void> monitorClientInfo( Reference<AsyncVar<Optional<ClusterInterface>>> clusterInterface, Standalone<StringRef> dbName,
|
||||||
Reference<ClusterConnectionFile> ccf, Reference<AsyncVar<ClientDBInfo>> outInfo )
|
Reference<ClusterConnectionFile> ccf, Reference<AsyncVar<ClientDBInfo>> outInfo )
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
loop {
|
loop {
|
||||||
|
@ -783,7 +783,6 @@ void setNetworkOption(FDBNetworkOptions::Option option, Optional<StringRef> valu
|
||||||
}
|
}
|
||||||
case FDBNetworkOptions::TLS_PLUGIN:
|
case FDBNetworkOptions::TLS_PLUGIN:
|
||||||
validateOptionValue(value, true);
|
validateOptionValue(value, true);
|
||||||
tlsOptions->set_plugin_name_or_path( value.get().toString() );
|
|
||||||
break;
|
break;
|
||||||
case FDBNetworkOptions::TLS_CERT_PATH:
|
case FDBNetworkOptions::TLS_CERT_PATH:
|
||||||
validateOptionValue(value, true);
|
validateOptionValue(value, true);
|
||||||
|
@ -872,7 +871,9 @@ void setupNetwork(uint64_t transportId, bool useMetrics) {
|
||||||
FlowTransport::createInstance(transportId);
|
FlowTransport::createInstance(transportId);
|
||||||
Net2FileSystem::newFileSystem();
|
Net2FileSystem::newFileSystem();
|
||||||
|
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
tlsOptions->register_network();
|
tlsOptions->register_network();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void runNetwork() {
|
void runNetwork() {
|
||||||
|
@ -1034,7 +1035,7 @@ ACTOR Future< pair<KeyRange,Reference<LocationInfo>> > getKeyLocation_internal(
|
||||||
|
|
||||||
if( info.debugID.present() )
|
if( info.debugID.present() )
|
||||||
g_traceBatch.addEvent("TransactionDebug", info.debugID.get().first(), "NativeAPI.getKeyLocation.Before");
|
g_traceBatch.addEvent("TransactionDebug", info.debugID.get().first(), "NativeAPI.getKeyLocation.Before");
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
choose {
|
choose {
|
||||||
when ( Void _ = wait( cx->onMasterProxiesChanged() ) ) {}
|
when ( Void _ = wait( cx->onMasterProxiesChanged() ) ) {}
|
||||||
|
@ -1248,7 +1249,7 @@ ACTOR Future<Key> getKey( Database cx, KeySelector k, Future<Version> version, T
|
||||||
|
|
||||||
Key locationKey(k.getKey(), k.arena());
|
Key locationKey(k.getKey(), k.arena());
|
||||||
state pair<KeyRange, Reference<LocationInfo>> ssi = wait( getKeyLocation(cx, locationKey, &StorageServerInterface::getKey, info, k.isBackward()) );
|
state pair<KeyRange, Reference<LocationInfo>> ssi = wait( getKeyLocation(cx, locationKey, &StorageServerInterface::getKey, info, k.isBackward()) );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if( info.debugID.present() )
|
if( info.debugID.present() )
|
||||||
g_traceBatch.addEvent("TransactionDebug", info.debugID.get().first(), "NativeAPI.getKey.Before"); //.detail("StartKey", printable(k.getKey())).detail("Offset",k.offset).detail("OrEqual",k.orEqual);
|
g_traceBatch.addEvent("TransactionDebug", info.debugID.get().first(), "NativeAPI.getKey.Before"); //.detail("StartKey", printable(k.getKey())).detail("Offset",k.offset).detail("OrEqual",k.orEqual);
|
||||||
|
@ -1555,8 +1556,8 @@ ACTOR Future<Standalone<RangeResultRef>> getRangeFallback( Database cx, Version
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void getRangeFinished(Reference<TransactionLogInfo> trLogInfo, double startTime, KeySelector begin, KeySelector end, bool snapshot,
|
void getRangeFinished(Reference<TransactionLogInfo> trLogInfo, double startTime, KeySelector begin, KeySelector end, bool snapshot,
|
||||||
Promise<std::pair<Key, Key>> conflictRange, bool reverse, Standalone<RangeResultRef> result)
|
Promise<std::pair<Key, Key>> conflictRange, bool reverse, Standalone<RangeResultRef> result)
|
||||||
{
|
{
|
||||||
if( trLogInfo ) {
|
if( trLogInfo ) {
|
||||||
int rangeSize = 0;
|
int rangeSize = 0;
|
||||||
|
@ -1602,7 +1603,7 @@ void getRangeFinished(Reference<TransactionLogInfo> trLogInfo, double startTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
ACTOR Future<Standalone<RangeResultRef>> getRange( Database cx, Reference<TransactionLogInfo> trLogInfo, Future<Version> fVersion,
|
ACTOR Future<Standalone<RangeResultRef>> getRange( Database cx, Reference<TransactionLogInfo> trLogInfo, Future<Version> fVersion,
|
||||||
KeySelector begin, KeySelector end, GetRangeLimits limits, Promise<std::pair<Key, Key>> conflictRange, bool snapshot, bool reverse,
|
KeySelector begin, KeySelector end, GetRangeLimits limits, Promise<std::pair<Key, Key>> conflictRange, bool snapshot, bool reverse,
|
||||||
TransactionInfo info )
|
TransactionInfo info )
|
||||||
{
|
{
|
||||||
state GetRangeLimits originalLimits( limits );
|
state GetRangeLimits originalLimits( limits );
|
||||||
|
@ -1802,8 +1803,8 @@ ACTOR Future<Standalone<RangeResultRef>> getRange( Database cx, Reference<Transa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Standalone<RangeResultRef>> getRange( Database const& cx, Future<Version> const& fVersion, KeySelector const& begin, KeySelector const& end,
|
Future<Standalone<RangeResultRef>> getRange( Database const& cx, Future<Version> const& fVersion, KeySelector const& begin, KeySelector const& end,
|
||||||
GetRangeLimits const& limits, bool const& reverse, TransactionInfo const& info )
|
GetRangeLimits const& limits, bool const& reverse, TransactionInfo const& info )
|
||||||
{
|
{
|
||||||
return getRange(cx, Reference<TransactionLogInfo>(), fVersion, begin, end, limits, Promise<std::pair<Key, Key>>(), true, reverse, info);
|
return getRange(cx, Reference<TransactionLogInfo>(), fVersion, begin, end, limits, Promise<std::pair<Key, Key>>(), true, reverse, info);
|
||||||
}
|
}
|
||||||
|
@ -2904,7 +2905,7 @@ ACTOR Future< StorageMetrics > waitStorageMetrics(
|
||||||
state int tooManyShardsCount = 0;
|
state int tooManyShardsCount = 0;
|
||||||
loop {
|
loop {
|
||||||
state vector< pair<KeyRange, Reference<LocationInfo>> > locations = wait( getKeyRangeLocations( cx, keys, shardLimit, false, &StorageServerInterface::waitMetrics, TransactionInfo(TaskDataDistribution) ) );
|
state vector< pair<KeyRange, Reference<LocationInfo>> > locations = wait( getKeyRangeLocations( cx, keys, shardLimit, false, &StorageServerInterface::waitMetrics, TransactionInfo(TaskDataDistribution) ) );
|
||||||
|
|
||||||
if( locations.size() == shardLimit ) {
|
if( locations.size() == shardLimit ) {
|
||||||
TraceEvent(!g_network->isSimulated() && ++tooManyShardsCount >= 15 ? SevWarnAlways : SevWarn, "WaitStorageMetricsPenalty")
|
TraceEvent(!g_network->isSimulated() && ++tooManyShardsCount >= 15 ? SevWarnAlways : SevWarn, "WaitStorageMetricsPenalty")
|
||||||
.detail("Keys", printable(keys))
|
.detail("Keys", printable(keys))
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
@ -178,7 +178,7 @@
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
|
|
|
@ -20,13 +20,25 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
// Specialized TLS plugin library
|
||||||
|
extern "C" void *get_tls_plugin(const char *plugin_type_name_and_version);
|
||||||
|
|
||||||
|
// Name of specialized TLS Plugin
|
||||||
|
extern const char* tlsPluginName;
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
Reference<T> loadPlugin( std::string const& plugin_name ) {
|
Reference<T> loadPlugin( std::string const& plugin_name ) {
|
||||||
void* plugin = loadLibrary( plugin_name.c_str() );
|
void *(*get_plugin)(const char*) = NULL;
|
||||||
void *(*get_plugin)(const char*) = (void*(*)(const char*))loadFunction( plugin, "get_plugin" );
|
#ifndef TLS_DISABLED
|
||||||
|
if (!plugin_name.compare(tlsPluginName)) {
|
||||||
if ( get_plugin )
|
get_plugin = (void*(*)(const char*)) get_tls_plugin;
|
||||||
return Reference<T>( (T*)get_plugin( T::get_plugin_type_name_and_version() ) );
|
}
|
||||||
else
|
else
|
||||||
return Reference<T>( NULL );
|
#endif
|
||||||
|
{
|
||||||
|
void* plugin = loadLibrary( plugin_name.c_str() );
|
||||||
|
if (plugin)
|
||||||
|
get_plugin = (void*(*)(const char*))loadFunction( plugin, "get_plugin" );
|
||||||
|
}
|
||||||
|
return (get_plugin) ? Reference<T>( (T*)get_plugin( T::get_plugin_type_name_and_version() ) ) : Reference<T>( NULL );
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
#include "Platform.h"
|
#include "Platform.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
// Name of specialized TLS Plugin
|
||||||
|
const char* tlsPluginName = "fdb-libressl-plugin";
|
||||||
|
|
||||||
// Must not throw an exception from this function!
|
// Must not throw an exception from this function!
|
||||||
static int send_func(void* ctx, const uint8_t* buf, int len) {
|
static int send_func(void* ctx, const uint8_t* buf, int len) {
|
||||||
TLSConnection* conn = (TLSConnection*)ctx;
|
TLSConnection* conn = (TLSConnection*)ctx;
|
||||||
|
@ -194,13 +197,6 @@ Reference<IListener> TLSNetworkConnections::listen( NetworkAddress localAddr ) {
|
||||||
// 5MB for loading files into memory
|
// 5MB for loading files into memory
|
||||||
#define CERT_FILE_MAX_SIZE (5 * 1024 * 1024)
|
#define CERT_FILE_MAX_SIZE (5 * 1024 * 1024)
|
||||||
|
|
||||||
void TLSOptions::set_plugin_name_or_path( std::string const& plugin_name_or_path ) {
|
|
||||||
if ( plugin )
|
|
||||||
throw invalid_option();
|
|
||||||
|
|
||||||
init_plugin( plugin_name_or_path );
|
|
||||||
}
|
|
||||||
|
|
||||||
void TLSOptions::set_cert_file( std::string const& cert_file ) {
|
void TLSOptions::set_cert_file( std::string const& cert_file ) {
|
||||||
try {
|
try {
|
||||||
TraceEvent("TLSConnectionSettingCertFile").detail("CertFilePath", cert_file);
|
TraceEvent("TLSConnectionSettingCertFile").detail("CertFilePath", cert_file);
|
||||||
|
@ -374,22 +370,14 @@ static void TLSConnectionLogFunc( const char* event, void* uid_ptr, bool is_erro
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
}
|
}
|
||||||
|
|
||||||
void TLSOptions::init_plugin( std::string const& plugin_path ) {
|
void TLSOptions::init_plugin() {
|
||||||
std::string path;
|
|
||||||
|
|
||||||
if ( plugin_path.length() ) {
|
TraceEvent("TLSConnectionLoadingPlugin").detail("Plugin", tlsPluginName);
|
||||||
path = plugin_path;
|
|
||||||
} else {
|
plugin = loadPlugin<ITLSPlugin>( tlsPluginName );
|
||||||
if ( !platform::getEnvironmentVar( "FDB_TLS_PLUGIN", path ) )
|
|
||||||
// FIXME: should there be other fallbacks?
|
|
||||||
path = platform::getDefaultPluginPath("fdb-libressl-plugin");
|
|
||||||
}
|
|
||||||
|
|
||||||
TraceEvent("TLSConnectionLoadingPlugin").detail("PluginPath", path);
|
|
||||||
plugin = loadPlugin<ITLSPlugin>( path.c_str() );
|
|
||||||
if ( !plugin ) {
|
if ( !plugin ) {
|
||||||
// FIXME: allow?
|
TraceEvent(SevError, "TLSConnectionPluginInitError").detail("Plugin", tlsPluginName).GetLastError();
|
||||||
TraceEvent(SevError, "TLSConnectionPluginInitError").detail("Plugin", path).GetLastError();
|
|
||||||
throw tls_error();
|
throw tls_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,9 +82,12 @@ struct TLSListener : IListener, ReferenceCounted<TLSListener> {
|
||||||
struct TLSOptions : ReferenceCounted<TLSOptions> {
|
struct TLSOptions : ReferenceCounted<TLSOptions> {
|
||||||
enum { OPT_TLS = 100000, OPT_TLS_PLUGIN, OPT_TLS_CERTIFICATES, OPT_TLS_KEY, OPT_TLS_VERIFY_PEERS, OPT_TLS_CA_FILE, OPT_TLS_PASSWORD };
|
enum { OPT_TLS = 100000, OPT_TLS_PLUGIN, OPT_TLS_CERTIFICATES, OPT_TLS_KEY, OPT_TLS_VERIFY_PEERS, OPT_TLS_CA_FILE, OPT_TLS_PASSWORD };
|
||||||
enum PolicyType { POLICY_VERIFY_PEERS = 1, POLICY_NO_VERIFY_PEERS };
|
enum PolicyType { POLICY_VERIFY_PEERS = 1, POLICY_NO_VERIFY_PEERS };
|
||||||
TLSOptions() : certs_set(false), key_set(false), verify_peers_set(false), ca_set(false) {}
|
TLSOptions() : certs_set(false), key_set(false), verify_peers_set(false), ca_set(false) {
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
|
init_plugin( );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void set_plugin_name_or_path( std::string const& plugin_name_or_path );
|
|
||||||
void set_cert_file( std::string const& cert_file );
|
void set_cert_file( std::string const& cert_file );
|
||||||
void set_cert_data( std::string const& cert_data );
|
void set_cert_data( std::string const& cert_data );
|
||||||
void set_ca_file(std::string const& ca_file);
|
void set_ca_file(std::string const& ca_file);
|
||||||
|
@ -101,7 +104,7 @@ struct TLSOptions : ReferenceCounted<TLSOptions> {
|
||||||
bool enabled();
|
bool enabled();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init_plugin( std::string const& plugin_path = "" );
|
void init_plugin( );
|
||||||
|
|
||||||
Reference<ITLSPlugin> plugin;
|
Reference<ITLSPlugin> plugin;
|
||||||
Reference<ITLSPolicy> policyVerifyPeersSet;
|
Reference<ITLSPolicy> policyVerifyPeersSet;
|
||||||
|
@ -132,7 +135,7 @@ private:
|
||||||
#define TLS_PASSWORD_FLAG "--tls_password"
|
#define TLS_PASSWORD_FLAG "--tls_password"
|
||||||
|
|
||||||
#define TLS_OPTION_FLAGS \
|
#define TLS_OPTION_FLAGS \
|
||||||
{ TLSOptions::OPT_TLS_PLUGIN, TLS_PLUGIN_FLAG, SO_OPT }, \
|
{ TLSOptions::OPT_TLS_PLUGIN, TLS_PLUGIN_FLAG, SO_REQ_SEP }, \
|
||||||
{ TLSOptions::OPT_TLS_CERTIFICATES, TLS_CERTIFICATE_FILE_FLAG, SO_REQ_SEP }, \
|
{ TLSOptions::OPT_TLS_CERTIFICATES, TLS_CERTIFICATE_FILE_FLAG, SO_REQ_SEP }, \
|
||||||
{ TLSOptions::OPT_TLS_KEY, TLS_KEY_FILE_FLAG, SO_REQ_SEP }, \
|
{ TLSOptions::OPT_TLS_KEY, TLS_KEY_FILE_FLAG, SO_REQ_SEP }, \
|
||||||
{ TLSOptions::OPT_TLS_VERIFY_PEERS, TLS_VERIFY_PEERS_FLAG, SO_REQ_SEP }, \
|
{ TLSOptions::OPT_TLS_VERIFY_PEERS, TLS_VERIFY_PEERS_FLAG, SO_REQ_SEP }, \
|
||||||
|
@ -140,11 +143,6 @@ private:
|
||||||
{ TLSOptions::OPT_TLS_CA_FILE, TLS_CA_FILE_FLAG, SO_REQ_SEP },
|
{ TLSOptions::OPT_TLS_CA_FILE, TLS_CA_FILE_FLAG, SO_REQ_SEP },
|
||||||
|
|
||||||
#define TLS_HELP \
|
#define TLS_HELP \
|
||||||
" " TLS_PLUGIN_FLAG " PLUGIN\n" \
|
|
||||||
" The name/path of a FoundationDB TLS plugin to be loaded.\n" \
|
|
||||||
" PLUGIN will be opened using dlopen (or LoadLibrary on\n" \
|
|
||||||
" Windows) and will be located using the search order\n" \
|
|
||||||
" of dlopen or LoadLibrary on your platform.\n" \
|
|
||||||
" " TLS_CERTIFICATE_FILE_FLAG " CERTFILE\n" \
|
" " TLS_CERTIFICATE_FILE_FLAG " CERTFILE\n" \
|
||||||
" The path of a file containing the TLS certificate and CA\n" \
|
" The path of a file containing the TLS certificate and CA\n" \
|
||||||
" chain.\n" \
|
" chain.\n" \
|
||||||
|
|
|
@ -198,7 +198,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
@ -222,7 +222,7 @@
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;FDB_CLEAN_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;FDB_CLEAN_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <openssl/md5.h>
|
#include <openssl/md5.h>
|
||||||
#elif !defined(_MD5_H)
|
#elif !defined(_MD5_H)
|
||||||
#define _MD5_H
|
#define _MD5_H
|
||||||
|
#include "flow/Platform.h"
|
||||||
|
|
||||||
/* Any 32-bit or wider unsigned integer data type will do */
|
/* Any 32-bit or wider unsigned integer data type will do */
|
||||||
typedef unsigned int MD5_u32plus;
|
typedef unsigned int MD5_u32plus;
|
||||||
|
@ -41,9 +42,9 @@ typedef struct {
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void MD5_Init(MD5_CTX *ctx);
|
extern void MULTIPLY_DEFINED_SYMBOL MD5_Init(MD5_CTX *ctx);
|
||||||
void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
|
extern void MULTIPLY_DEFINED_SYMBOL MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
|
||||||
void MD5_Final(unsigned char *result, MD5_CTX *ctx);
|
extern void MULTIPLY_DEFINED_SYMBOL MD5_Final(unsigned char *result, MD5_CTX *ctx);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -151,7 +151,9 @@ CSimpleOpt::SOption g_rgOptions[] = {
|
||||||
{ OPT_IO_TRUST_SECONDS, "--io_trust_seconds", SO_REQ_SEP },
|
{ OPT_IO_TRUST_SECONDS, "--io_trust_seconds", SO_REQ_SEP },
|
||||||
{ OPT_IO_TRUST_WARN_ONLY, "--io_trust_warn_only", SO_NONE },
|
{ OPT_IO_TRUST_WARN_ONLY, "--io_trust_warn_only", SO_NONE },
|
||||||
|
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
TLS_OPTION_FLAGS
|
TLS_OPTION_FLAGS
|
||||||
|
#endif
|
||||||
|
|
||||||
SO_END_OF_OPTIONS
|
SO_END_OF_OPTIONS
|
||||||
};
|
};
|
||||||
|
@ -627,7 +629,9 @@ static void printUsage( const char *name, bool devhelp ) {
|
||||||
" Machine class (valid options are storage, transaction,\n"
|
" Machine class (valid options are storage, transaction,\n"
|
||||||
" resolution, proxy, master, test, unset, stateless, log, router,\n"
|
" resolution, proxy, master, test, unset, stateless, log, router,\n"
|
||||||
" and cluster_controller).\n");
|
" and cluster_controller).\n");
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
printf(TLS_HELP);
|
printf(TLS_HELP);
|
||||||
|
#endif
|
||||||
printf(" -v, --version Print version information and exit.\n");
|
printf(" -v, --version Print version information and exit.\n");
|
||||||
printf(" -h, -?, --help Display this help and exit.\n");
|
printf(" -h, -?, --help Display this help and exit.\n");
|
||||||
if( devhelp ) {
|
if( devhelp ) {
|
||||||
|
@ -813,7 +817,7 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
//Enables profiling on this thread (but does not start it)
|
//Enables profiling on this thread (but does not start it)
|
||||||
registerThreadForProfiling();
|
registerThreadForProfiling();
|
||||||
|
|
||||||
std::string commandLine;
|
std::string commandLine;
|
||||||
for (int a = 0; a<argc; a++) {
|
for (int a = 0; a<argc; a++) {
|
||||||
if (a) commandLine += ' ';
|
if (a) commandLine += ' ';
|
||||||
|
@ -1191,15 +1195,9 @@ int main(int argc, char* argv[]) {
|
||||||
case OPT_IO_TRUST_WARN_ONLY:
|
case OPT_IO_TRUST_WARN_ONLY:
|
||||||
fileIoWarnOnly = true;
|
fileIoWarnOnly = true;
|
||||||
break;
|
break;
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
case TLSOptions::OPT_TLS_PLUGIN:
|
case TLSOptions::OPT_TLS_PLUGIN:
|
||||||
try {
|
args.OptionArg();
|
||||||
const char* plugin_path = args.OptionArg();
|
|
||||||
tlsOptions->set_plugin_name_or_path( plugin_path ? plugin_path : "" );
|
|
||||||
} catch (Error& e) {
|
|
||||||
fprintf(stderr, "ERROR: cannot load TLS plugin `%s' (%s)\n", args.OptionArg(), e.what());
|
|
||||||
printHelpTeaser(argv[0]);
|
|
||||||
flushAndExit(FDB_EXIT_ERROR);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case TLSOptions::OPT_TLS_CERTIFICATES:
|
case TLSOptions::OPT_TLS_CERTIFICATES:
|
||||||
tlsCertPath = args.OptionArg();
|
tlsCertPath = args.OptionArg();
|
||||||
|
@ -1216,6 +1214,7 @@ int main(int argc, char* argv[]) {
|
||||||
case TLSOptions::OPT_TLS_VERIFY_PEERS:
|
case TLSOptions::OPT_TLS_VERIFY_PEERS:
|
||||||
tlsVerifyPeers.push_back(args.OptionArg());
|
tlsVerifyPeers.push_back(args.OptionArg());
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1463,7 +1462,7 @@ int main(int argc, char* argv[]) {
|
||||||
// Initialize the thread pool
|
// Initialize the thread pool
|
||||||
CoroThreadPool::init();
|
CoroThreadPool::init();
|
||||||
// Ordinarily, this is done when the network is run. However, network thread should be set before TraceEvents are logged. This thread will eventually run the network, so call it now.
|
// Ordinarily, this is done when the network is run. However, network thread should be set before TraceEvents are logged. This thread will eventually run the network, so call it now.
|
||||||
TraceEvent::setNetworkThread();
|
TraceEvent::setNetworkThread();
|
||||||
|
|
||||||
if (role == Simulation || role == CreateTemplateDatabase) {
|
if (role == Simulation || role == CreateTemplateDatabase) {
|
||||||
//startOldSimulator();
|
//startOldSimulator();
|
||||||
|
@ -1475,6 +1474,7 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
openTraceFile(publicAddress, rollsize, maxLogsSize, logFolder, "trace", logGroup);
|
openTraceFile(publicAddress, rollsize, maxLogsSize, logFolder, "trace", logGroup);
|
||||||
|
|
||||||
|
#ifndef TLS_DISABLED
|
||||||
if ( tlsCertPath.size() )
|
if ( tlsCertPath.size() )
|
||||||
tlsOptions->set_cert_file( tlsCertPath );
|
tlsOptions->set_cert_file( tlsCertPath );
|
||||||
if (tlsCAPath.size())
|
if (tlsCAPath.size())
|
||||||
|
@ -1489,7 +1489,7 @@ int main(int argc, char* argv[]) {
|
||||||
tlsOptions->set_verify_peers( tlsVerifyPeers );
|
tlsOptions->set_verify_peers( tlsVerifyPeers );
|
||||||
|
|
||||||
tlsOptions->register_network();
|
tlsOptions->register_network();
|
||||||
|
#endif
|
||||||
if (role == FDBD || role == NetworkTestServer) {
|
if (role == FDBD || role == NetworkTestServer) {
|
||||||
try {
|
try {
|
||||||
listenError = FlowTransport::transport().bind(publicAddress, listenAddress);
|
listenError = FlowTransport::transport().bind(publicAddress, listenAddress);
|
||||||
|
|
|
@ -252,7 +252,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
@ -273,7 +273,7 @@
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
|
@ -299,4 +299,4 @@
|
||||||
<Target Name="MyPreCompileSteps" AfterTargets="CLCompile">
|
<Target Name="MyPreCompileSteps" AfterTargets="CLCompile">
|
||||||
<Exec Command="..\bin\$(Configuration)\coveragetool.exe "$(OutDir)coverage.$(TargetName).xml" @(ActorCompiler -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLInclude -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLCompile -> '%(RelativeDir)%(Filename)%(Extension)', ' ')" />
|
<Exec Command="..\bin\$(Configuration)\coveragetool.exe "$(OutDir)coverage.$(TargetName).xml" @(ActorCompiler -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLInclude -> '%(RelativeDir)%(Filename)%(Extension)', ' ') @(CLCompile -> '%(RelativeDir)%(Filename)%(Extension)', ' ')" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
fdbserver_CFLAGS := $(fdbclient_CFLAGS) -I fdbserver/workloads
|
fdbserver_CFLAGS := $(fdbclient_CFLAGS) -I fdbserver/workloads
|
||||||
fdbserver_LDFLAGS := $(fdbrpc_LDFLAGS)
|
fdbserver_LDFLAGS := $(fdbrpc_LDFLAGS)
|
||||||
fdbserver_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a
|
fdbserver_LIBS := lib/libfdbclient.a lib/libfdbrpc.a lib/libflow.a $(TLS_LIBS)
|
||||||
|
|
||||||
ifeq ($(PLATFORM),linux)
|
ifeq ($(PLATFORM),linux)
|
||||||
fdbserver_LIBS += -ldl -lpthread -lrt
|
fdbserver_LIBS += -ldl -lpthread -lrt
|
||||||
|
|
|
@ -529,6 +529,17 @@ void* loadFunction(void* lib, const char* func_name);
|
||||||
#define EXTERNC
|
#define EXTERNC
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Multiply Defined Symbol (support for weak function declaration).
|
||||||
|
*/
|
||||||
|
#ifndef MULTIPLY_DEFINED_SYMBOL
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#define MULTIPLY_DEFINED_SYMBOL
|
||||||
|
#else
|
||||||
|
#define MULTIPLY_DEFINED_SYMBOL __attribute__((weak))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// Logs a critical error message and exits the program
|
// Logs a critical error message and exits the program
|
||||||
EXTERNC void criticalError(int exitCode, const char *type, const char *message);
|
EXTERNC void criticalError(int exitCode, const char *type, const char *message);
|
||||||
EXTERNC void flushAndExit(int exitCode);
|
EXTERNC void flushAndExit(int exitCode);
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;_DEBUG;_HAS_ITERATOR_DEBUGGING=0;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/bigobj @../flow/no_intellisense.opt %(AdditionalOptions)</AdditionalOptions>
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
<Optimization>Full</Optimization>
|
<Optimization>Full</Optimization>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;FDB_CLEAN_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>TLS_DISABLED;WIN32;_WIN32_WINNT=0x0502;WINVER=0x0502;NTDDI_VERSION=0x05020000;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;FDB_CLEAN_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||||
<EnablePREfast>false</EnablePREfast>
|
<EnablePREfast>false</EnablePREfast>
|
||||||
|
|
Loading…
Reference in New Issue