Compare commits

...
Author SHA1 Message Date
Automatic Release Builder a157e50302 Ooops, use correct variable name. 2021-07-29 10:21:20 +01:00
Automatic Release Builder 70e6b6b13f new version: 2020.3.11 2021-07-29 09:08:37 +01:00
James Turner c457561472 HTTPRepo: Add detail to an error
This is showing up in the wild, but not clear how, so extend the
logging.
2021-07-29 08:47:12 +01:00
James Turner 2b5ac6350d remove an error on stable, too common. 2021-07-28 15:14:41 +01:00
James Turner 1c30b29168 Report errors on TileDetails callback failures
This callback can do out of memory and other failures, so catch
those and report them.
2021-07-28 15:14:41 +01:00
James Turner ce9f476ddb Don't report PropsIO exceptions 2021-07-28 14:23:38 +01:00
James Turner 2621418d3a Fix a dumb back-port issue. 2021-07-22 10:11:04 +01:00
James Turner 174b341bef Don’t report HTTPRepo removeChild failures
Sentry-Id: FLIGHTGEAR-E5T
2021-07-15 10:31:28 +01:00
James Turner df33713069 Remove incorrectly added ‘version’ file 2021-07-15 08:44:08 +01:00
James Turner cde75530fe BTG reading: don’t crash on empty error message
Sentry-Id:FLIGHTGEAR-WA8
2021-07-15 08:43:31 +01:00
7 changed files with 65 additions and 51 deletions
+1 -1
View File
@@ -1 +1 @@
2020.3.10 2020.3.11
+3 -2
View File
@@ -774,7 +774,7 @@ private:
if (!ok) { if (!ok) {
SG_LOG(SG_TERRASYNC, SG_WARN, "removal failed for:" << path); SG_LOG(SG_TERRASYNC, SG_WARN, "removal failed for:" << path);
throw sg_io_exception("Failed to remove existing file/dir:", path); throw sg_io_exception("Failed to remove existing file/dir:", path, "", false);
} }
} }
@@ -1424,7 +1424,8 @@ HTTPRepository::failure() const
SG_LOG(SG_TERRASYNC, SG_WARN, SG_LOG(SG_TERRASYNC, SG_WARN,
"failed to update entry:" << relativePath << " status/code: " "failed to update entry:" << relativePath << " status/code: "
<< innerResultCodeAsString(fileStatus) << innerResultCodeAsString(fileStatus)
<< "/" << fileStatus); << "/" << fileStatus
<< "\nrepo:" << baseUrl);
simgear::reportFailure(simgear::LoadFailure::NetworkError, simgear::ErrorCode::TerraSync, simgear::reportFailure(simgear::LoadFailure::NetworkError, simgear::ErrorCode::TerraSync,
"failed to update entry:" + innerResultCodeAsString(fileStatus), "failed to update entry:" + innerResultCodeAsString(fileStatus),
+3 -1
View File
@@ -48,9 +48,11 @@ static std::string gzErrorMessage(gzFile fd)
if (errNum == Z_ERRNO) { if (errNum == Z_ERRNO) {
return simgear::strutils::error_string(errno); return simgear::strutils::error_string(errno);
} else { } else if (gzMsg) {
return {gzMsg}; return {gzMsg};
} }
return {"GZError: no string code for code:" + std::to_string(errNum)};
} }
void sgReadChar ( gzFile fd, char *var ) void sgReadChar ( gzFile fd, char *var )
+7 -7
View File
@@ -161,7 +161,7 @@ setFlag( int& mode,
string message = "Unrecognized flag value '"; string message = "Unrecognized flag value '";
message += flag; message += flag;
message += '\''; message += '\'';
throw sg_io_exception(message, location, SG_ORIGIN); throw sg_io_exception(message, location, SG_ORIGIN, false);
} }
} }
@@ -176,7 +176,7 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
string message = "Root element name is "; string message = "Root element name is ";
message += name; message += name;
message += "; expected PropertyList"; message += "; expected PropertyList";
throw sg_io_exception(message, location, SG_ORIGIN); throw sg_io_exception(message, location, SG_ORIGIN, false);
} }
// Check for an include. // Check for an include.
@@ -188,7 +188,7 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
{ {
string message ="Cannot open file "; string message ="Cannot open file ";
message += attval; message += attval;
throw sg_io_exception(message, location, SG_ORIGIN); throw sg_io_exception(message, location, SG_ORIGIN, false);
} }
readProperties(path, _root, 0, _extended); readProperties(path, _root, 0, _extended);
} catch (sg_io_exception &e) { } catch (sg_io_exception &e) {
@@ -278,7 +278,7 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
{ {
string message ="Cannot open file "; string message ="Cannot open file ";
message += val; message += val;
throw sg_io_exception(message, location, SG_ORIGIN); throw sg_io_exception(message, location, SG_ORIGIN, false);
} }
readProperties(path, node, 0, _extended); readProperties(path, node, 0, _extended);
} }
@@ -353,7 +353,7 @@ PropsVisitor::endElement (const char * name)
string message = "Unrecognized data type '"; string message = "Unrecognized data type '";
message += st.type; message += st.type;
message += '\''; message += '\'';
throw sg_io_exception(message, location, SG_ORIGIN); throw sg_io_exception(message, location, SG_ORIGIN, false);
} }
if( !ret ) if( !ret )
SG_LOG SG_LOG
@@ -701,7 +701,7 @@ writeProperties (const SGPath &path, const SGPropertyNode * start_node,
if (output.good()) { if (output.good()) {
writeProperties(output, start_node, write_all, archive_flag); writeProperties(output, start_node, write_all, archive_flag);
} else { } else {
throw sg_io_exception("Cannot open file", sg_location(path.utf8Str())); throw sg_io_exception("Cannot open file", sg_location(path.utf8Str()), "", false);
} }
} }
@@ -770,7 +770,7 @@ copyPropertyValue(const SGPropertyNode *in, SGPropertyNode *out)
break; break;
string message = "Unknown internal SGPropertyNode type"; string message = "Unknown internal SGPropertyNode type";
message += in->getType(); message += in->getType();
throw sg_error(message, SG_ORIGIN); throw sg_error(message, SG_ORIGIN, false);
} }
return retval; return retval;
-3
View File
@@ -457,9 +457,6 @@ SGAnimation::~SGAnimation()
} }
if (!info.empty()) if (!info.empty())
{ {
reportFailure(LoadFailure::Misconfigured, ErrorCode::XMLModelLoad,
"Could not find at least one of the following object for animation:" + info,
SGPath::fromUtf8(_modelData.getPath()));
SG_LOG(SG_IO, SG_DEV_ALERT, "Could not find at least one of the following" SG_LOG(SG_IO, SG_DEV_ALERT, "Could not find at least one of the following"
" objects for animation: " << info << " in file: " << _modelData.getPath()); " objects for animation: " << info << " in file: " << _modelData.getPath());
} }
+51 -36
View File
@@ -37,6 +37,7 @@
#include <simgear/scene/util/SGReaderWriterOptions.hxx> #include <simgear/scene/util/SGReaderWriterOptions.hxx>
#include <simgear/scene/util/OptionsReadFileCallback.hxx> #include <simgear/scene/util/OptionsReadFileCallback.hxx>
#include <simgear/scene/util/SGNodeMasks.hxx> #include <simgear/scene/util/SGNodeMasks.hxx>
#include <simgear/debug/ErrorReportingCallback.hxx>
#include "SGNodeTriangles.hxx" #include "SGNodeTriangles.hxx"
#include "GroundLightManager.hxx" #include "GroundLightManager.hxx"
@@ -55,9 +56,11 @@ typedef std::list<SGDirectionalLightBin> SGDirectionalLightListBin;
#define SG_SIMPLIFIER_RATIO (0.001) #define SG_SIMPLIFIER_RATIO (0.001)
#define SG_SIMPLIFIER_MAX_LENGTH (1000.0) #define SG_SIMPLIFIER_MAX_LENGTH (1000.0)
#define SG_SIMPLIFIER_MAX_ERROR (2000.0) #define SG_SIMPLIFIER_MAX_ERROR (2000.0)
#define SG_TILE_MIN_EXPIRY (180.0)
using namespace simgear; using namespace simgear;
using ReadResult = osgDB::ReaderWriter::ReadResult;
// QuadTreeBuilder is used by Random Objects Generator // QuadTreeBuilder is used by Random Objects Generator
typedef std::pair<osg::Node*, int> ModelLOD; typedef std::pair<osg::Node*, int> ModelLOD;
struct MakeQuadLeaf { struct MakeQuadLeaf {
@@ -97,47 +100,59 @@ public:
SG_LOG( SG_TERRAIN, SG_DEBUG, "SGTileDetailsCallback::~SGTileDetailsCallback() num cbs left " << num_tdcb ); SG_LOG( SG_TERRAIN, SG_DEBUG, "SGTileDetailsCallback::~SGTileDetailsCallback() num cbs left " << num_tdcb );
} }
virtual osgDB::ReaderWriter::ReadResult readNode( ReadResult readNode(const std::string&, const osgDB::Options*) override
const std::string&, const osgDB::Options*)
{ {
SGMaterialLibPtr matlib; osg::ref_ptr<osg::Group> group;
osg::ref_ptr<SGMaterialCache> matcache; simgear::ErrorReportContext ec{"btg", _path};
osg::ref_ptr<osg::Group> group = new osg::Group;
group->setDataVariance(osg::Object::STATIC);
// generate textured triangle list try {
std::vector<SGTriangleInfo> matTris; group = new osg::Group;
GetNodeTriangles nodeTris(_gbs_center, &matTris); SGMaterialLibPtr matlib;
_rootNode->accept( nodeTris ); osg::ref_ptr<SGMaterialCache> matcache;
group->setDataVariance(osg::Object::STATIC);
// build matcache // generate textured triangle list
matlib = _options->getMaterialLib(); std::vector<SGTriangleInfo> matTris;
if (matlib) { GetNodeTriangles nodeTris(_gbs_center, &matTris);
SGGeod geodPos = SGGeod::fromCart(_gbs_center); _rootNode->accept( nodeTris );
matcache = matlib->generateMatCache(geodPos);
}
#if 0
// TEST : See if we can regenerate landclass shapes from node
for ( unsigned int i=0; i<matTris.size(); i++ ) {
matTris[i].dumpBorder(_gbs_center);
}
#endif
osg::Node* node = loadTerrain(); // build matcache
if (node) { matlib = _options->getMaterialLib();
group->addChild(node); if (matlib) {
} SGGeod geodPos = SGGeod::fromCart(_gbs_center);
matcache = matlib->generateMatCache(geodPos);
}
#if 0
// TEST : See if we can regenerate landclass shapes from node
for ( unsigned int i=0; i<matTris.size(); i++ ) {
matTris[i].dumpBorder(_gbs_center);
}
#endif
osg::LOD* lightLOD = generateLightingTileObjects(matTris, matcache); osg::Node* node = loadTerrain();
if (lightLOD) { if (node) {
group->addChild(lightLOD); group->addChild(node);
} }
osg::LOD* objectLOD = generateRandomTileObjects(matTris, matcache); osg::LOD* lightLOD = generateLightingTileObjects(matTris, matcache);
if (objectLOD) { if (lightLOD) {
group->addChild(objectLOD); group->addChild(lightLOD);
}
osg::LOD* objectLOD = generateRandomTileObjects(matTris, matcache);
if (objectLOD) {
group->addChild(objectLOD);
}
} catch (sg_exception& sge) {
simgear::reportFailure(simgear::LoadFailure::BadData, simgear::ErrorCode::BTGLoad,
"Failed to load BTG file:" + sge.getFormattedMessage(),
sge.getLocation());
return ReadResult::ERROR_IN_READING_FILE;
} catch (std::bad_alloc &e) {
simgear::reportFailure(simgear::LoadFailure::OutOfMemory, simgear::ErrorCode::BTGLoad,
"Out of memory loading tile details", sg_location{_path});
return ReadResult::INSUFFICIENT_MEMORY_TO_LOAD;
} }
return group.release(); return group.release();
-1
View File
@@ -1 +0,0 @@
2020.3.8